1

我在 .NET 中有一个 Web 服务,它以数组作为输入。服务的请求被视为

<soap:Body>
<DisplayNames xmlns="http://tempuri.org/">
  <Names>
    <Name>
      <FirstName>string</FirstName>
      <LastName>string</LastName>
    </Name>
    <Name>
      <FirstName>string</FirstName>
      <LastName>string</LastName>
    </Name>
  </Names>
</DisplayNames>

是否可以删除父标签(NAMES)并提出如下请求?

<soap:Body>
<DisplayNames xmlns="http://tempuri.org/">
    <Name>
      <FirstName>string</FirstName>
      <LastName>string</LastName>
    </Name>
    <Name>
      <FirstName>string</FirstName>
      <LastName>string</LastName>
    </Name>
</DisplayNames>

4

2 回答 2

1

如果您的意思是改变 Web 服务的工作方式,以便客户端不必以这种方式发送它,而不是使用现有工具。它与如何将 XML 映射回代码函数有关。

我不确切知道您的函数在代码隐藏中的样子,但从 XML 我可以假设它看起来像这样(猜测返回值)

[WebMethod]
private bool DisplayNames(Name[] Names)
{
   ...
}

这个特定的服务只需要一个名称数组。<Names>标签指定了一个输入参数。运行时将此识别为预期的名称参数,并能够将其解析出来。如果所有 Web 服务仅采用一个数组参数,您的想法可能会奏效。

我不知道这是否有意义,但为了举例说明,此 Web 服务还采用名为“IgnoreErrors”的布尔值。

[WebMethod]
private bool DisplayNames(Name[] Names, bool IgnoreErrors)
{
   ...
}

XML 将如下所示:

<soap:Body>
<DisplayNames xmlns="http://tempuri.org/">
  <Names>
    <Name>
      <FirstName>string</FirstName>
      <LastName>string</LastName>
    </Name>
    <Name>
      <FirstName>string</FirstName>
      <LastName>string</LastName>
    </Name>
  </Names>
  <ShowErrors>
    <value>false</value>
  </ShowErrors>
</DisplayNames>

现在,如果你按照你的要求做,删除标签,它看起来像这样:

<soap:Body>
<DisplayNames xmlns="http://tempuri.org/">
  <Name>
      <FirstName>string</FirstName>
      <LastName>string</LastName>
  </Name>
  <Name>
      <FirstName>string</FirstName>
      <LastName>string</LastName>
  </Name>
  </Names>
  <ShowErrors>
    <value>false</value>
  </ShowErrors>
</soap:Body>

当你看到它时,试着想象一下函数签名在代码隐藏中的样子。现在看起来像两个字典和一个布尔值,而不是一个数组和一个布尔值。

所以,所有这一切都再次说明,<Name>标签标识代码隐藏函数中的 Name 参数。

于 2012-05-17T13:59:33.473 回答
1

改变了我的方法

[WebMethod] 公共字符串 DisplayNames(Name[] NameCollection) {

[WebMethod] 公共字符串 DisplayNames([XmlElement("Names")] Name[] NameCollection) {

于 2012-05-24T10:52:09.680 回答