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不知道反序列化对VB6代码的XML响应。
我尝试在Web变体中保存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()
什么是需要更改Web方法的响应fomat或VB6中的商店响应类型?
我必须使用SOAP Type库我可以使用COM。感谢您的回复
答案 0 :(得分:1)
SoapClient库已过时,不应使用。
幸运的是,它不是您在VB6代码中使用Web服务的唯一选择。 VB6可以使用任何合理的COM组件。我建议您在C#中创建一个COM组件来使用您的服务。您可以使用常规的“添加服务引用”来使用该服务,然后将服务调用作为COM对象上的方法公开。
这样,你所依赖的唯一过时的代码就是VB6本身。
答案 1 :(得分:0)
Vb6真的很老了,在我的情况下本身不能使用webservices我直接调用web服务,在这里查看Problems with Visual Basic 6.0 and MagentoSoap然后你可以从字符串更改为自定义对象