C# Web サービス クライアントを使用して ASP.NET 2.0 Web サービスを呼び出すと、奇妙な問題が発生しました。このサービスは単純な製品検索であり、検索語に一致する製品の配列を返します。以下の WSDL ファイルの関連部分を参照してください。
私の C# クライアントは、VS2010 (非 WCF) で Web 参照を追加することによって単純に生成されます。比較のために、Axis 1.4 Java クライアントを使用しています。
C# クライアントと Java クライアントの両方で同じ検索パラメーターを使用すると、呼び出しによって 50 個の製品が返されますが、C# クライアントでは結果配列の長さが 1 であるのに対し、Java クライアントでは正しい 50 個の要素が表示されます。
問題を特定する方法の提案を探しています-次のことを試しました:
- TCP/IP モニターを使用して、Web サービスから返された XML を比較します。XML は C# と Java で同じように見え、50 個の製品が含まれています。
- netcat を使用して HTTP パラメーターを比較します。C# のデフォルトは HTTP 1.1 ですが、Axis 1.4 は HTTP 1.0 を使用しますが、C# クライアントを変更して HTTP 1.0 を使用しても何も変わりません。
- SOAP 1.1 の代わりに SOAP 1.2 を試す: 効果なし
- Soap の代わりに HttpGetProtocol、HttpPostProtocol を試す
どんな提案でも大歓迎です。
編集: 完全な 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>