我遇到了一個奇怪的問題,使用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