Я столкнулся со странной проблемой при использовании клиента веб-службы C # для вызова веб-службы ASP.NET 2.0.
Служба представляет собой простой поиск товаров и возвращает массив товаров, соответствующих поисковому запросу - см. Соответствующую часть файла WSDL ниже.
Мой клиент C # просто создается путем добавления веб-ссылки в VS2010 (не WCF), и для сравнения я использую Java-клиент Axis 1.4.
Используя одинаковые параметры поиска как в C #, так и в клиенте Java, вызов возвращает 50 продуктов, но в клиенте C # массив результатов имеет длину 1, а клиент Java показывает правильные 50 элементов.
Я ищу предложения, как найти проблему - я пробовал следующее:
- Сравните XML, возвращенный веб-сервисом с помощью монитора TCP / IP: XML выглядит идентично C # и Java и содержит 50 продуктов
- Сравнение параметров HTTP с использованием netcat: C # по умолчанию использует HTTP 1.1, а Axis 1.4 использует HTTP 1.0, но изменение клиента C # на использование HTTP 1.0 также ничего не меняет
- Попробуйте SOAP 1.2 вместо SOAP 1.1: без эффекта
- Попробуйте HttpGetProtocol, HttpPostProtocol вместо Soap
Любые предложения высоко ценятся.
РЕДАКТИРОВАТЬ: Полный WSDL и сгенерированный код (Reference.cs) можно найти здесь:
http://timmay.dk/Reference.txt
http://timmay.dk/Wsdl.txt
Упрощенная часть WSDL:
<s:element name="Search">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="SearchTerm" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="StartFrom" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="NumberToBeReturned" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
<s:element name="SearchResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="SearchResult" type="tns:SearchResult" />
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="SearchResult">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="Products" type="tns:ArrayOfResponseProduct" />
</s:sequence>
</s:complexType>
<s:complexType name="ArrayOfResponseProduct">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="ResponseProduct" nillable="true" type="tns:ResponseProduct" />
</s:sequence>
</s:complexType>
<s:complexType name="ResponseProduct">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="Fields" type="tns:ArrayOfResponseField" />
</s:sequence>
<s:attribute name="id" type="s:string" />
</s:complexType>