王朝网络
分享
 
 
 

使用 SOAP Toolkit 2.0 将现有代码作为 Web 服务提供

王朝other·作者佚名  2006-01-08
宽屏版  字体: |||超大  

使用 SOAP Toolkit 2.0 将现有代码作为 Web 服务提供 使用 .NET 建立分布式应用程序

Steve Kirk 和 Priya Dhawan

Microsoft Developer Network

摘要:本文介绍了使用 Microsoft SOAP Toolkit 版本 2.0 将现有 Microsoft Visual Basic 6.0 代码作为 Web 服务提供时所进行的数据转换。

目录

简介

现有代码提供的数据类型

ADO 2x Command 对象

ADO 2x Recordset 对象

Stream 对象

XMLDOM 对象

总结

简介

Microsoft®SOAP Toolkit 版本 2.0 简化了将现有代码作为 Web 服务提供和使用的任务,MSDN Library 的 SDK 部分中的 SOAP Toolkit 2.0 文档(英文)对此进行了说明。在服务器端执行的一些主要功能是,在现有代码传递的不同数据类型的数据和 XML 消息(在 Web 服务客户机和服务器之间使用)之间进行转换。简单数据类型的转换可以自动处理,较为复杂的数据类型则需要开发人员提供转换代码。

评估现有代码是否适合于作为 Web 服务提供时,本文讨论的数据转换问题并不是唯一需要考虑的问题。应考虑的其它因素包括对象和状态模型、返回的数据大小、如何表示已经成功、如何返回错误信息、安全模型(包括访问控制、身份验证和加密)、执行模型(同步或异步)、如何分发代码,以及事务模型(COM+ 事务或声明型事务),等等。这些问题将在即将发表的体系结构主题(英文)文章中进行讨论。

现有代码提供的数据类型

要介绍现有代码传递的所有数据类型的转换是一个相当大的工程,因此本文介绍了某些最常用的数据类型。通过 SOAP Toolkit 代码进行转换的一个替代方案是使用 XML 接口对现有代码进行扩展。本文讨论了以下数据类型的转换方法:

ADO 2x Command 对象

ADO2x Recordset 对象

Stream 对象

XMLDOM 对象

ADO 2x Command 对象

直接访问数据库的现有代码经常会提供 Microsoft ActiveX® 数据对象 (ADO) 的 Command 对象。虽然不能在运行于不同进程中的应用程序层之间传递 Command 对象,但可以在同一进程内传递该对象。对于单行数据实体,通过 Command 对象的输出参数返回数据比通过 ADO 记录集返回数据效率更高。因此,ADO Command 对象对于返回单行实体数据十分有用。

读数据

以下示例中的现有代码返回一个 ADO Command 对象,它包含作为输出参数的数据。在传递给 Web 服务的客户之前,Custom Type Mapper 中的代码使用 SoapSerializer 对象对 Command 对象进行转换:

With SoapSerializer

`转换 CommandType

.startElement "CommandType"

.writeString Cmd.CommandType

.endElement

`转换 CommandText

.startElement "CommandText"

cmdText = Cmd.CommandText

cmdText = Left(Cmd.CommandText, Len(cmdText) - 8)

cmdText = Right(cmdText, Len(cmdText) - 7)

.writeString cmdText

.endElement

`转换 Parameters 集合

.startElement "Parameters"

For i = 0 To oCmd.Parameters.Count - 1

.startElement Right(oCmd.Parameters(i).Name, _

Len(oCmd.Parameters(i).Name) - 1)

.startElement "Direction"

.writeString oCmd.Parameters(i).Direction

.endElement

.startElement "Type"

.writeString oCmd.Parameters(i).Type

.endElement

.startElement "Size"

.writeString oCmd.Parameters(i).Size

.endElement

.startElement "Value"

.writeString oCmd.Parameters(i).Value

.endElement

.endElement

Next

.endElement

End With

写数据

将数据作为 Command 对象的参数传递是一种非常有效的数据传递方法。它还可以进行扩展,并提供了一些类型检查功能。

以下示例中,客户提交给 Web 服务的 XML 数据被转换为 ADO Command 对象的参数,它将被传递到现有代码:

Dim Cmd As ADODB.Command

Dim Param As ADODB.Parameter

' pNode 是包含客户提交的 XML 的 MSXML2.IXMLDOMNode

' 实例化一个 ADO Command 对象

Set Cmd = New ADODB.Command

With Cmd

' 应用 CommandType 和 CommandText

.CommandType = _

CInt(pNode.selectSingleNode("CommandType").nodeTypedValue)

.CommandText = pNode.selectSingleNode("CommandText").nodeTypedValue

' 填充 Parameters 集合

Set nodeParent = pNode.selectSingleNode("Parameters")

For i = 0 To nodeParent.childNodes.length - 1

Set nodeParameter = nodeParent.childNodes(i)

Set Param = New ADODB.Parameter

With Param

.Name = "@" + nodeParameter.nodeName

.Direction = _

nodeParameter.selectSingleNode("Direction").nodeTypedValue

.Type = nodeParameter.selectSingleNode("Type").nodeTypedValue

.Size = nodeParameter.selectSingleNode("Size").nodeTypedValue

.Value = factory.getMapper(enXSDstring, _

Nothing).Read(nodeParameter.selectSingleNode("Value"), _

bstrEncoding, encodingMode, lFlags)

End With

.Parameters.Append oParam

Next

End With

ADO 2x Recordset 对象

ADO 2x 断开连接的记录集通常用于在多层应用程序的各层之间传递数据。数据可以是单行、多行或分层次的行。

读数据

本示例中,现有代码返回一个 ADO Recordset 对象,它包含的层次行数据将被转换为 XML,然后再返回给客户:

Dim Doc As MSXML2.DOMDocument

Set Doc = New MSXML2.DOMDocument

' 将记录集数据写入 XMLDOM

rs.Save oDoc, adPersistXML

' 将 XML 传递到 SOAP Toolkit Serializer

SoapSerializer.writeXML Doc.xml

写数据

以下示例中,使用表示层次行数据的 XML 填充 ADO Recordset 对象,该对象将被传递到现有代码:

Dim rs As ADODB.Recordset

Dim Doc As MSXML2.DOMDocument

Set rs = New ADODB.Recordset

Set Doc = New MSXML2.DOMDocument

' 将 XML 载入 XMLDOMDocument

Doc.loadXML pNode.xml

' 使用来自 XMLDOMDocument 的 XML 填充记录集

rs.Open Doc

Stream 对象

流提供了一种在应用程序的本地层之间传递数据的有效方法。它是从 Microsoft SQL Server™2000 中读取 XML 的主要方法。

读数据

以下示例中,现有代码返回表示层次行数据的 XML 流,它将被转换,然后返回给客户:

Dim inStream As ADODB.Stream

' pvar 包含现有代码返回的流对象

Set inStream = pvar

' 将 XML 数据从流传递到 SOAP Serializer

SoapSerializer.writeString inStream.ReadText

XMLDOM 对象

XMLDOM 对象是一种在多层应用程序的本地层之间传递数据的好方法。它提供了接口可扩展性、类型检查和架构验证功能。

读数据

以下示例中,现有代码返回一个 XMLDOMDocument 对象,该对象将被转换,然后返回给客户:

`pvar 包含 XMLDOMDocument

pSoapSerializer.writeXML pvar.xml

写数据

以下示例中,使用表示层次行数据(由客户提交)的 XML 填充 XMLDOM 对象,然后将该对象传递到现有代码:

Set oDoc = New MSXML2.DOMDocument

' 将 IXMLDOMNode XML 载入 DOMDocument 对象

`pnode 包含 IXMLDOMNode 对象

oDoc.loadXML pNode.childNodes(0).xml

总结

本文及附带的示例介绍了有关数据转换的信息。通过数据转换,可以使用 SOAP Toolkit 2.0 将现有代码作为 Web 服务提供。本文介绍了一些常用的接口对象。

这些解决方案的性能各异,并且受所传递的数据大小影响。在本系列后面的文章中,我们将对这些实现方法进行比较。

评估现有代码是否适合作为 Web 服务时,接口只不过是应当考虑的诸多因素之一。应考虑的其它因素包括安全性(包括授权、身份验证和加密)、事务模型、状态模型、返回错误和结果的方式,以及代码是同步还是异步执行,等等。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有