我在使用 C# webservice 客户端调用 ASP.NET 2.0 webservice 时遇到了一个奇怪的问题。该服务是一个简单的产品搜索并返回与搜索词匹配的产品数组 - 请参阅下面 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.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>