這是奇怪的,因爲它得到。 XmlArray中給出的名稱attrib的ElementName出現在WISDL中,但不是實際的響應。在3.5下運行(2.0.50727 for IIS AppPool)。ASP.NET WebService忽略返回:XmlArray元素名稱
更詳細的挖掘 - 自動化的WSDL對POST/GET和SOAP響應有不同的聲明,差異在於它們只是引用自動生成的elem/type而不是整個響應類型/ elem,它具有新名稱。
問題依然存在 - 爲什麼會發生這種情況,更重要的是如何解決這個問題?
下面是詳細信息:
的WebMethod:
[WebMethod]
[return: XmlArray(ElementName = "TickTick")]
public TTickerItem[] GetActiveTickerItems2(uint version, uint language, uint locale, int startIndex, int maxItems)
在WSDL:
<s:element name="GetActiveTickerItems2Response">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="TickTick" type="tns:ArrayOfTTickerItem" />
</s:sequence>
</s:complexType>
</s:element>
<wsdl:message name="GetActiveTickerItems2SoapIn">
<wsdl:part name="parameters" element="tns:GetActiveTickerItems2" />
</wsdl:message>
<wsdl:message name="GetActiveTickerItems2SoapOut">
<wsdl:part name="parameters" element="tns:GetActiveTickerItems2Response" />
</wsdl:message>
自動genned測試頁顯示新的名稱(TickTick)的例子。
實際響應:
<ArrayOfTTickerItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
<TTickerItem>
<m_message>New Ticker 1st Message</m_message>
<m_priority>2</m_priority>
<m_messageType>0</m_messageType>
<m_data1>0</m_data1>
<m_data2>13</m_data2>
</TTickerItem>
. . . . . . . .
</ArrayOfTTickerItem>
略有不同GET/POST聲明 - 錯過了新的名字:
<wsdl:message name="GetActiveTickerItems2HttpGetOut">
<wsdl:part name="Body" element="tns:ArrayOfTTickerItem" />
</wsdl:message>
. . . . . . .
<wsdl:message name="GetActiveTickerItems2HttpPostOut">
<wsdl:part name="Body" element="tns:ArrayOfTTickerItem" />
</wsdl:message>
它仍然是某些設置的事情,web.config中的一部分(我只是簡單地添加名稱=「HttpGet」和HttpPost在//system.web/webServices/protocols xpath這一直足以)...
沒有涉及web引用 - 服務器代碼獲取構建和部署xcopy - VS沒有得到關於它的任何信息,測試頁面是由ASP.net自動生成的,如http://localhost/MyVroot/MyWS.asmx,http://localhost/MyVroot/MyWS.a smx?WSDL,http://MyBox/MyVroot/MyWS.asmx?op = GetActiveTickerItems2等等等等,所以我正在查看實際響應XML在IE – ZXX 2010-07-25 02:01:07