Я работаю над реализацией .NET Core-совместимого клиента для конечной точки WSDL / SOAP.
Ответ, который я получаю, имеет следующую структуру:
<?xml version="1.0" encoding="iso-8859-1"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="urn:account">
<SOAP-ENV:Body>
<ns1:readAvailableEventIdsResponse xmlns:ns1="http://tempuri.org/">
<errors xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="xsd:string[0]"></errors>
<response xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="tns:EventId[2]">
<item xsi:type="tns:EventId">
<id xsi:type="xsd:string">1000</id>
<description xsi:type="xsd:string">First Event</description>
</item>
<item xsi:type="tns:EventId">
<id xsi:type="xsd:string">1001</id>
<description xsi:type="xsd:string">Second Event</description>
</item>
</response>
</ns1:readAvailableEventIdsResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Однако мой клиент не сериализует коллекцию ответов. Вот мое определение модели:
[MessageContract(WrapperName = "readAvailableEventIdsResponse")]
public class ReadAvailableEventIdsResponse
{
[MessageBodyMember(Name = "errors", Namespace = "", Order = 1)]
public StringArray Errors { get; set; }
[MessageBodyMember(Name = "response", Namespace = "", Order = 2)]
public EventIdArray Response { get; set; }
}
[CollectionDataContract(Name = "Array", Namespace = "http://schemas.xmlsoap.org/soap/encoding/", ItemName = "item")]
public class EventIdArray : List<EventId> { }
[DataContract]
public class EventId
{
[DataMember(Name = "id")]
public string Id { get; set; }
[DataMember(Name = "description")]
public string Description { get; set; }
}
Однако, когда я вызываю конечную точку службы (настроенную с помощью пользовательского кодировщика сообщений, определенного здесь ), мой EventIdArray
пуст.
Что я делаю не так?