我需要从我的 VB6 程序中使用外部 Web 服务。如果可能的话,我希望能够在没有 SOAP 工具包的情况下部署我的程序,但这不是必需的。我没有 Web 服务源,也没有创建它。它是供应商提供的服务。
那么在 SOAP 工具包之外,从 VB6 使用 Web 服务的最佳方式是什么?
我需要从我的 VB6 程序中使用外部 Web 服务。如果可能的话,我希望能够在没有 SOAP 工具包的情况下部署我的程序,但这不是必需的。我没有 Web 服务源,也没有创建它。它是供应商提供的服务。
那么在 SOAP 工具包之外,从 VB6 使用 Web 服务的最佳方式是什么?
我使用此函数从 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
.NET 从一开始就对 Web 服务有很好的支持,因此您可以在 .NET 中将 Web 服务客户端逻辑开发为 .dll 库/程序集,并通过 COM Interop 在 VB6 应用程序中使用它。
假设您在 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。这很好。
Pocketsoap工作得很好。要生成您的对象,请使用WSDL 生成器。使用它你不必自己解析任何东西,而且一切都很好并且是强类型的。
查看 Scott Swigart 在 MSDN VB 6.0 资源中心的这篇文章。
到目前为止,我已经使用 PocketSOAP 连接到 Salesforce API 取得了一定程度的成功。我无法使用 WSDL 向导,因为它使用调用名称的前 23 个字符生成包装类文件名,这会导致重复。尽管如此,PocketSOAP 在没有向导的情况下对我来说已经足够好了,而且它比将 XMLHTTP 与 DOMDocument 一起使用要简单得多。
我还研究了在 .NET 中制作包装器或使用“MS Office {MSO 版本} Web 服务工具包”库之一,但这些选项存在很大的部署麻烦。PocketSOAP 是一个简单的 COM DLL,不依赖于某些特定版本的 MS Office,并在 MPL 下获得许可。
SOAP 工具包可以说是你能得到的最好的。在没有它的情况下尝试做同样的事情将需要相当大的额外努力。你需要有非常严肃的理由才能这样做。
SOAP 消息的格式很难手动读取或写入,强烈建议使用第三方库。