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

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

SoapClient库已经过时,不应该使用。

幸运的是,这不是你在VB6代码中使用web服务的唯一选择。VB6可以使用任何合理的COM组件。我建议你在c#中创建一个COM组件来使用你的服务。您可以使用普通的"添加服务引用"来消费服务,然后将服务调用作为COM对象上的方法公开。

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

Vb6真的很老了,不能原生地与web服务一起工作,在我的情况下,我直接调用web服务,看看这里Visual Basic 6.0和MagentoSoap的问题,然后你可以从字符串更改为自定义对象