Указанный тип не был распознан: name = 'Struct' - PullRequest
0 голосов
/ 07 февраля 2020

Я пытаюсь использовать SOAP сервис с сервера партнера. Я думал, что разработка оболочки сервиса будет проще с инструментами Visual Studio. Но когда я попытался добавить ссылку на сервис, я не смог получить клиентский класс из-за какой-то ошибки. Поиск по переполнению стека Я нашел решение, которое предлагает сделать это, добавив в качестве веб-ссылки. Я сделал это таким образом, и я мог вызвать метод входа в систему. Теперь у меня проблема с другим методом get_all_items.

Это исключение:

Сообщение: в документе XML есть ошибка (2, 408).

Трассировка стека:

   at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
   at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
   at System.Web.Services.Protocols.SoapHttpClientProtocol.InvokeAsyncCallback(IAsyncResult result)
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at MyProject.MyService.<GetAllItems>d__21.MoveNext() in C:\...\MySolution\MyProject\MyService.cs:line 104

Это внутреннее исключение:

Сообщение: указанный тип не был распознан: name = 'Struct', пространство имен = 'http://schemas.xmlsoap.org/soap/encoding/ ', at.

Трассировка стека:

   at System.Xml.Serialization.XmlSerializationReader.GetPrimitiveType(XmlQualifiedName typeName, Boolean throwOnUnknown)
   at System.Xml.Serialization.XmlSerializationReader.ReadArray(String typeName, String typeNs)
   at System.Xml.Serialization.XmlSerializationReader.ReadReferencingElement(String name, String ns, Boolean elementCanBeType, String& fixupReference)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderIViewServiceService.Read147_get_all_roomsResponse()
   at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer243.Deserialize(XmlSerializationReader reader)
   at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)

И это конверт ответа soap (я получил его с помощью других инструментов тестирования и изменил некоторые личные данные):

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:ns1="https://partner.server/somepath/soap.php"
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body>
    <ns1:itemsResponse>
      <return SOAP-ENC:arrayType="SOAP-ENC:Struct[1]" xsi:type="SOAP-ENC:Array">
        <item xsi:type="SOAP-ENC:Struct">
          <val1 xsi:type="xsd:string">0001</val1>
          <val2 xsi:type="xsd:string">0001</val2>
          <val3 xsi:type="xsd:string">1</val3>
          ...
        </item>
      </return>
    </ns1:itemsResponse>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Кажется, что net не нравится тип Struct в строке <return SOAP-ENC:arrayType="SOAP-ENC:Struct[1]" xsi:type="SOAP-ENC:Array">. Есть ли причина, чтобы получить эту ошибку? Как решить эту проблему, не кодируя мой SOAP клиент службы с нуля?

Среда разработки:

  • Windows 10
  • Visual Studio Professional 2017
  • . NET 4.7.2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...