ASP.NET WebService игнорирует возврат: XmlArray ElementName - PullRequest
1 голос
/ 24 июля 2010

Это так странно, как только может.Имя, указанное в элементарном имени атрибута 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, чего всегда было достаточно) ...

Ответы [ 3 ]

1 голос
/ 11 августа 2010

Боюсь, мне придется закрыть это как ошибку в ASP.NET, так как у меня есть последовательное воспроизведение, и никто не сказал, что он работал с их настройками. Будет на всякий случай еще несколько дней.

0 голосов
/ 31 июля 2013

Я знаю, что этот вопрос задавали некоторое время назад, но он все еще возникает в Google, и я немного сегодня борюсь с той же проблемой, поэтому я подумал, что это может помочь кому-то еще ...

Причинапоскольку это потому, что рассматриваемый элемент является корневым узлом в выводе ... чтобы заставить его работать должным образом, веб-метод должен быть определен как:

[WebMethod]
[return: XmlArray(ElementName = "TickTick"),XmlRoot(ElementName = "TickTick")]
public TTickerItem[] GetActiveTickerItems2(uint version, uint language, uint locale, int startIndex, int maxItems)
0 голосов
/ 24 июля 2010

Вы пытались обновить веб-ссылку в своем проекте asp.net?

...