C# ASP.NET WebService忽略返回:XmlArray ElementName

C# ASP.NET WebService忽略返回:XmlArray ElementName,c#,web-services,post,get,asmx,C#,Web Services,Post,Get,Asmx,这很奇怪。XmlArray attrib的ElementName中给出的名称将出现在WISDL中,但不会出现在实际响应中。在3.5(IIS应用程序池为2.0.50727)下运行 经过更详细的挖掘——自生WSDL对POST/GET和SOAP响应有不同的声明,区别在于它们只是引用数组的自生元素/类型,而不是具有新名称的整个响应类型/元素 问题仍然存在——为什么会发生这种情况,更重要的是如何解决它? 详情如下: WebMethod: [WebMethod] [return: XmlAr

这很奇怪。XmlArray attrib的ElementName中给出的名称将出现在WISDL中,但不会出现在实际响应中。在3.5(IIS应用程序池为2.0.50727)下运行

经过更详细的挖掘——自生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>

新股票代码第一条消息
2.
0
0
13
. . . . . . . .
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的一部分(我只是在//system.web/webServices/protocols xpath下简单地添加name=“HttpGet”和HttpPost,这已经足够了)

您尝试过更新asp.net项目中的web引用吗?

您尝试过更新asp.net项目中的web引用吗?

我恐怕不得不关闭这个,因为我在asp.net中有一个bug,因为我一直在重复,而且没有人说它与他们的设置一起工作。我将继续使用几天,以防万一。

我恐怕不得不在ASP.NET中关闭这一个,因为我有一致的复制,没有人说它与他们的设置一起工作。我会再坚持几天,以防万一。

我知道这个问题不久前就被问到了,但它仍然出现在谷歌上,我今天一直在努力解决同样的问题,所以我想这可能会帮助其他人

之所以这样做,是因为所讨论的元素是输出中的根节点…为了使其按预期工作,webmethod应定义为:

[WebMethod]
[return: XmlArray(ElementName = "TickTick"),XmlRoot(ElementName = "TickTick")]
public TTickerItem[] GetActiveTickerItems2(uint version, uint language, uint locale, int startIndex, int maxItems)

我知道这个问题在不久前就被问到了,但它仍然出现在谷歌上,我今天也在努力解决同样的问题,所以我想这可能会帮助其他人

之所以这样做,是因为所讨论的元素是输出中的根节点…为了使其按预期工作,webmethod应定义为:

[WebMethod]
[return: XmlArray(ElementName = "TickTick"),XmlRoot(ElementName = "TickTick")]
public TTickerItem[] GetActiveTickerItems2(uint version, uint language, uint locale, int startIndex, int maxItems)

没有涉及到web引用-服务器代码得到构建,xcopy部署-VS没有得到任何关于它的信息,测试页面是由ASP.net自动生成的,比如,等等。所以我在看IET中的实际响应XML没有涉及到web引用-服务器代码得到构建,xcopy部署-VS没有得到任何关于它的信息,测试页是由ASP.NET等自动生成的,所以我在IEif查看实际的响应XML,您认为它是一个bug,然后请将其归档。这很可能是XML序列化程序中的错误,但是,在这种情况下,它很可能永远不会被修复。部分原因可能与HttpGet服务的不同处理方式有关-请注意,attrib位于web方法上,不在类上-attrib附加到反射表中web方法的记录,所以XmlSerializer甚至看不到它,除非上面或后面的东西指向它。我知道这部分原因是因为我们的自定义二进制序列化程序在哪里找到了好东西:-),所以可能要回到GET请求以不同方式处理的问题上。没有VS在视线-只是CLR。如果你认为它是一个错误,那么请把它归档。这很可能是XML序列化程序中的错误,但是,在这种情况下,它很可能永远不会被修复。部分原因可能与HttpGet服务的不同处理方式有关-请注意,attrib位于web方法上,不在类上-attrib附加到反射表中web方法的记录,所以XmlSerializer甚至看不到它,除非上面或后面的东西指向它。我知道这部分原因是因为我们的自定义二进制序列化程序在哪里找到了好东西:-),所以可能要回到GET请求以不同方式处理的问题上。看不到VS-只有CLR。