利用 SOAP 头保持 EJB 状态:处理 VB.6 和 VB.NET SOAP 客户端中的状态
2010-03-23 00:00:00 来源:WEB开发网Web 服务不仅在软件开发界非常流行,而且在用户中也是如此。在日益全球化的今天,共享信息已经变得越来越重要。大的公司需要把它们的 VB 或 .NET 应用程序与合作伙伴的 J2EE 引擎连接在一起。Web 服务为软件跨不同的平台和编程语言进行互操作提供了方法。但具有讽刺意味的是,由于不同厂商之间的 Web 服务实现存在着差异,互操作性还没有完全实现。另外,SOAP 并不保持状态,这使得完成互操作性的任务更加具有挑战性。状态的概念与 J2EE 服务器应用程序的关系尤其密切,J2EE 服务器应用程序常常把它们的业务流程作为有状态会话 Bean 公开。尽管如此,互操作性还是可以实现的,并且可以利用 SOAP 头并借助于序列化的魔力来保持状态。本文将重点介绍连接 VB 和 .NET 桌面客户端中的有状态会话 Bean。
用 VB 6.0 开发 SOAP 客户端
用 VB 开发 SOAP 客户端需要安装 Microsoft SOAP 类型库,这个库可以从 Microsoft 网站下载。在接下来的例子中,我使用了 Microsoft Soap Toolkit 3.0。Microsoft SOAP 类型库不包括 SOAP 头实现,而只是一个接口。
在 VB 6.0 中使用 Microsoft SOAP 类型库实现 SOAP 头
有一种方法可以创建单独的 DLL(仅包含 SOAP 头实现),并且将该实现装载到作为产品一部分的客户端中,如 清单1所示。在本例中,您可以调用 DLL VBHeaderHandler.dll。
清单1. 用 VB 实现的头示例
Implements IHeaderHandler
Option Explicit
Public HeaderValue As String
Private Function IHeaderHandler_readHeader(
ByVal par_Reader As MSSOAPLib30.ISoapReader,
ByVal par_HeaderNode As MSXML2.IXMLDOMNode,
ByVal par_Object As Object) As Boolean
IHeaderHandler_readHeader = False
End Function
Private Function IHeaderHandler_WillWriteHeaders() As Boolean
IHeaderHandler_WillWriteHeaders = True
End Function
Private Sub IHeaderHandler_writeHeaders( _
ByVal pSerializer As SoapSerializer30, _
ByVal pObject As Object)
pSerializer.StartHeaderElement "SoapHeaderHandler", "http://www.ibm.com"
pSerializer.StartElement "SoapHeaderHandler"
pSerializer.WriteString HeaderValue
pSerializer.EndElement
pSerializer.EndHeaderElement
End Sub
更多精彩
赞助商链接