我在.NET中有一个Web服务,它以数组作为输入。该服务的请求是sens as
<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>
答案 0 :(得分: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参数。
答案 1 :(得分:1)
更改了我的方法
来自
[的WebMethod] public string DisplayNames(Name [] NameCollection) {
到
[的WebMethod] public string DisplayNames([XmlElement(“Names”)] Name [] NameCollection) {