在VB6 - SoapClient30 MS SOAP Type库中反序列化SOAP消息
本文关键字:SOAP 反序列化 消息 Type SoapClient30 MS VB6 | 更新日期: 2023-09-27 18:18:26
. NET Web Service from VB6在VB6中,我使用SoapClient30 (MS SOAP类型库)。
Web方法有这个签名:
[WebMethod]
public List<List<string>> SomeMethod(string [] args){}
它在SOAP中返回的XML是这样的:
<?xml version="1.0" encoding="utf-8" ?>
<ArrayOfArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://icz.sk/">
<ArrayOfString>
<string>1</string>
<string>2</string>
<string>3</string>
<string>4</string>
<string>5</string>
</ArrayOfString>
<ArrayOfString>
<string>1</string>
<string>2</string>
<string>3</string>
<string>4</string>
<string>5</string>
</ArrayOfString>
</ArrayOfArrayOfString>
初始化SoapClient30,我使用WSDL。
当我在顶部调用web方法时,我在VB6中得到了这个例外:
SoapMapper:Restoring data into SoapMapper ArrayOfString failed HRESULT=0x8007000E
SoapMapper:Restoring data into SoapMapper SomeMethod failed HRESULT=0x8007000E
Client:Unspecified client error. HRESULT=0x8007000E:
我认为SoapClient30不知道反序列化XML响应到VB6代码。
我尝试保存web方法的结果。
Private proxy As SoapClient30
Dim result As Variant
Dim input_param(0 To 2) As String
proxy.MSSoapInit WSDL_PATH
input_param(0) = arg1
input_param(1) = arg2
input_param(2) = ""
result = proxy.SomeMethod()
在VB6中存储响应需要改变web方法或类型的响应格式吗?
我必须使用SOAP类型库,我可以使用COM。感谢您的回复
SoapClient库已经过时,不应该使用。
幸运的是,这不是你在VB6代码中使用web服务的唯一选择。VB6可以使用任何合理的COM组件。我建议你在c#中创建一个COM组件来使用你的服务。您可以使用普通的"添加服务引用"来消费服务,然后将服务调用作为COM对象上的方法公开。
这样,你所依赖的唯一过时的代码是VB6本身。
Vb6真的很老了,不能原生地与web服务一起工作,在我的情况下,我直接调用web服务,看看这里Visual Basic 6.0和MagentoSoap的问题,然后你可以从字符串更改为自定义对象