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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д