从VB6消费Web服务的最佳方法是什么?
我需要从VB6程序中使用外部Web服务。如果可能的话,我希望能够在没有SOAP工具包的情况下部署我的程序,但这不是必需的。我没有Web服务源,也没有创建它。它是供应商提供的服务。
因此,在SOAP工具包之外,使用VB6中的Web服务的最佳方法是什么?
解决方案
可以说SOAP工具箱是我们可以获得的最好的工具。尝试在没有它的情况下做同样的事情将需要大量额外的精力。我们需要有非常认真的理由才能做到这一点。
SOAP消息的格式并不是很容易手动读取或者编写,因此强烈建议使用第三方库。
假设我们正在Windows XP Professional或者更高版本上运行,一种有趣的方法是使用SOAP名称。这是一个示例,摘自某些MSDN页面。我不知道这项特定服务是否有效,但我们知道了...
set SoapObj = GetObject ("soap:wsdl=http://www.xmethods.net/sd/TemperatureService.wsdl") WScript.Echo "Fairbanks Temperature = " & SoapObj.getTemp("99707")
VBScript也可以使用此机制。很好
从一开始,.NET就对Web服务提供了良好的支持,因此我们可以将.NET中的Web服务客户端逻辑开发为.dll库/程序集,并通过COM Interop在VB6应用程序中使用它。
我使用此功能从Web服务获取数据。
Private Function HttpGetRequest(url As String) As DOMDocument Dim req As XMLHTTP60 Set req = New XMLHTTP60 req.Open "GET", url, False req.send "" Dim resp As DOMDocument If req.responseText <> vbNullString Then Set resp = New DOMDocument60 resp.loadXML req.responseText Else Set resp = req.responseXML End If Set HttpGetRequest = resp End Function
Pocketsoap效果很好。要生成对象,请使用WSDL生成器。使用此方法,我们不必自己解析任何内容,而且所有内容都很好并且具有强类型。
在MSDN VB 6.0资源中心上查阅Scott Swigart的这篇文章。
从Visual Basic 6调用Web服务的简便方法
到目前为止,我已经使用PocketSOAP连接到Salesforce API取得了一定程度的成功。我无法使用WSDL向导,因为它会使用调用名称的前23个字符来生成包装器类文件名,这将导致重复。尽管如此,PocketSOAP在没有向导的情况下对我来说已经足够好了,并且比将XMLHTTP与DOMDocument结合使用要简单得多。
我还考虑在.NET或者使用" MS Office {MSO版本} Web服务工具包"库之一进行包装,但是使用这些选项存在很大的部署麻烦。 PocketSOAP是一个简单的COM DLL,不依赖于某些特定版本的MS Office,并已获得MPL的许可。