专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »DotNet » web游戏源代码:使用 SOAP Toolkit 2.0 将现有代码作为 Web 服务 »正文

web游戏源代码:使用 SOAP Toolkit 2.0 将现有代码作为 Web 服务

来源: 发布时间:星期四, 2009年2月12日 浏览:361次 评论:0


使用 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 Record 对象
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 Record 对象
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(enXSD, _
Nothing).Read(nodeParameter.selectSingleNode(\"Value\"), _
bstrEncoding, encodingMode, lFlags)
End With
.Parameters.Append oParam
Next
End With

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

读数据
本举例中现有代码返回个 ADO Record 对象它包含层次行数据将被转换为 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 Record 对象该对象将被传递到现有代码:

Dim rs As ADODB.Record
Dim Doc As MSXML2.DOMDocument
Set rs = New ADODB.Record
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 服务时接口只不过是应当考虑诸多原因的应考虑其它原因包括安全性(包括授权、身份验证和加密)、事务模型、状态模型、返回和结果方式以及代码是同步还是异步执行等等
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: