Я пытаюсь использовать 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