我遇到了一个奇怪的问题,使用C#web服务客户端调用ASP.NET 2.0 web服务。 该服务是一种简单的产品搜索,并返回与搜索项匹配的产品数组 - 请参阅下面的WSDL文件的相关部分。
我的C#客户端只是通过在VS2010(非WCF)中添加Web引用而生成的,为了进行比较,我使用了Axis 1.4 Java客户端。
在C#和Java客户端中使用相同的搜索参数,调用会返回50个产品,但在C#客户端中,结果数组的长度为1,而Java客户端显示正确的50个元素。调试C#web服务客户端
我要找的建议如何定位的问题 - 我已经试过如下:
- 比较使用TCP/IP监控由Web服务返回的XML:中的XML看起来与C#与Java的并包含50个产品
- 使用netcat的比较HTTP参数:C#默认为HTTP 1.1,而轴1.4使用HTTP 1.0,但改变C#客户端使用HTTP 1.0,以及确实没有改变任何东西
- 尝试SOAP 1.2,而不是SOAP的1.1:没有效果
- 试试HttpGetPr协议,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>
C#客户端如何仅用1个数组元素返回50个产品? – 2010-07-28 08:48:19
数组*应该*长度为50,但长度为1.通过查看TCP/IP监视器中的XML,我可以看到服务返回的所有50个产品 - 解析的结果是问题。 – Tim 2010-07-28 08:59:51
既然明显的答案不能帮到你,我们需要看看你生成的代码,甚至是一个包含bug的小型完整工作示例(但在这种情况下可能会很难)。 – Abel 2010-07-28 10:18:59