Десериализация SOAP-сообщения в VB6 - SoapClient30 MS Тип библиотеки SOAP - PullRequest
0 голосов
/ 21 декабря 2011

NET веб-сервис от VB6. В VB6 я использую SoapClient30 (библиотека типов MS SOAP).

Веб-метод имеет эту подпись:

[WebMethod]
public List<List<string>> SomeMethod(string [] args){}

Возвращаемый XML в SOAP выглядит так:

<?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.

Когда я вызываю веб-метод сверху, я получаю в 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.

Я пытаюсь сохранить результат веб-метода в Variant.

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?

Я должен использовать библиотеку типов SOAP, я могу использовать COM. Спасибо за ответы

Ответы [ 2 ]

1 голос
/ 21 декабря 2011

Библиотека SoapClient устарела и не должна использоваться.

К счастью, это не единственный выбор для использования веб-службы в коде VB6. VB6 может использовать любой разумный компонент COM. Я рекомендую вам создать COM-компонент в C #, чтобы использовать ваш сервис. Вы можете использовать обычный «Добавить ссылку на службу» для использования службы, а затем представить вызовы службы как методы для объекта COM.

Таким образом, единственный устаревший код, от которого вы зависите, - это сам VB6.

0 голосов
/ 21 декабря 2011

Vb6 действительно старый и не так изначально работает с веб-сервисами, в моем случае я делаю прямой вызов веб-сервису, посмотрите здесь Проблемы с Visual Basic 6.0 и MagentoSoap , затем вы можете перейти от строки к пользовательскому объекту

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...