Soap: php сервер, C# клиент. Обмен массивами
Формулировка задачи:
Основной проект написан на php. пот ТЗ необходимо написать веб-сервис, использующий soap.
сервер был написан, xsd - валидация, передача простых данных, все это было организовано.
для тестирования выбирался самописный C# клиент и программа SoapUI.
первоначально возникла проблема с передачей массивов данных. C# клиент категорически не понимал данные, которые в схеме были описаны вот так:
ошибка вылетала следующая (приблизительный текст):
проблему решил заменив на массив:
но тут неожиданно проблема возникла в обратном - отправка массива от C# клиента к серверу. Типы были объявлены аналогично. Сервер категорически отказывался принимать данные, выкидывая сообщения:
причем это сообщение выкидывал что soapUI, что клиент
сделал обратный финт:
soapUI активно скушал эту схему и отправил запрос вида и получил вполне вменяемый ответ
C# клиент сформировал ответ и сервер получил запрос вида (фрагмент):
и ответ от сервера:
теперь вопрос, что я делаю не так? или же как настроить C# клиент чтобы он отправлял не массив итемов, а повторяющиеся теги?
<xsd:element name="buy_category" type="tns:Category" nillable="true"/> <xsd:complexType name="Category"> <xsd:all> <xsd:element name="int_array" type="xsd:int" minOccurs="1" maxOccurs="unbounded"/> </xsd:all> </xsd:complexType>
Невозможно десериализовать ответного сообщение.
Невозможно преобразовать SomeType в SomeType[]
<xsd:element name="buy_category" type="CategoryList" nillable="true"/> <xsd:complexType name="CategoryList"> <xsd:complexContent> <xsd:restriction base="soapenc:Array"> <xsd:attribute ref="soapenc:arrayType" wsdl:arrayType="Category[]"/> </xsd:restriction> </xsd:complexContent> </xsd:complexType> <xsd:complexType name="Category"> <xsd:all> <xsd:element name="int_array" type="xsd:int"/> </xsd:all> </xsd:complexType>
SOAP-ERROR: Encoding: Violation of encoding rules
<xsd:element name="int_array" type="xsd:int" minOccurs="1" maxOccurs="unbounded"/>
<int_array xsi:type="xsd:string" xs:type="type:string">1</int_array> <int_array xsi:type="xsd:string" xs:type="type:string">2</int_array> <int_array xsi:type="xsd:string" xs:type="type:string">3</int_array> <int_array xsi:type="xsd:string" xs:type="type:string">4</int_array>
<int_array href="#id2"/> <q3:Array id="id2" q3:arrayType="xsd:string[3]" xmlns:q3="http://schemas.xmlsoap.org/soap/encoding/"> <Item>1</Item> <Item>asder</Item> <Item>book</Item> </q3:Array>
SOAP-ERROR: Encoding: Violation of encoding rules
Решение задачи: «Soap: php сервер, C# клиент. Обмен массивами»
textual
Листинг программы
[XmlArray("item")] [XmlArrayItem(typeof(item), ElementName = "item")] public item[] items { get; set; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д