Это так странно, как только может.Имя, указанное в элементарном имени атрибута XmlArray, появляется в WISDL, но не в реальном ответе.Запуск под 3.5 (2.0.50727 для IIS AppPool).
После более подробного копания - у автоматически сгенерированного WSDL есть разные объявления для ответов POST / GET и SOAP, и разница в том, что они просто ссылаются на автоматически сгенерированный элемент / типмассив, а не весь тип ответа / элемент с новым именем.
По-прежнему возникает вопрос: ПОЧЕМУ это происходит, и, что более важно, как это исправить?
ЗдесьПодробности:
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>
На автоматически созданной тестовой странице показаны примеры с новым именем (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>
Это может быть частью некоторых настроек, часть веб.config (я просто добавил add name = "HttpGet" и HttpPost под //system.web/webServices/protocols xpath, чего всегда было достаточно) ...