在VB6中反序列化SOAP消息 - SoapClient30 MS SOAP类型库

时间:2011-12-21 16:25:20

标签: c# asp.net web-services soap vb6

来自VB6的.NET Web服务。在VB6中,我使用SoapClient30(MS SOAP Type库)。

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。感谢您的回复

2 个答案:

答案 0 :(得分:1)

SoapClient库已过时,不应使用。

幸运的是,它不是您在VB6代码中使用Web服务的唯一选择。 VB6可以使用任何合理的COM组件。我建议您在C#中创建一个COM组件来使用您的服务。您可以使用常规的“添加服务引用”来使用该服务,然后将服务调用作为COM对象上的方法公开。

这样,你所依赖的唯一过时的代码就是VB6本身。

答案 1 :(得分:0)

Vb6真的很老了,在我的情况下本身不能使用webservices我直接调用web服务,在这里查看Problems with Visual Basic 6.0 and MagentoSoap然后你可以从字符串更改为自定义对象