如何在WSDL中没有'elementformdefault =“qualified”'属性的情况下提供C#.Net Web服务?

时间:2015-04-30 11:14:35

标签: c# .net web-services wsdl

我将为具有给定WSDL的客户端提供Web服务。 不幸的是,我无法告诉序列化程序接受不合格的elementForm。

我寻求将elementFormDefault设置为"不合格"的方法。甚至"没有"隐藏它完整

我会收到类似

的内容
<NS:Request>
    <some stuff>…</some stuff>
</NS:Request>

但我在请求中看不到任何内容 仅当我更改前缀或删除前缀并通过向请求添加新NS来更改NS范围时

<NS:Request>
  < NS:some stuff>…</ NS:some stuff>
</NS:Request>

< Request xmlns:myNamespace>
   < some stuff>…</some stuff>
</Request>

网络服务运作良好。

感谢您的支持

1 个答案:

答案 0 :(得分:0)

虽然这是2年前的一个死的问题,但我仍然想回答它,因为这是我遇到完全相同问题时的第一个相关搜索结果。

通过.asmx?wsdl生成的WSDL文件具有属性

elementFormDefault=qualified

在其架构标记内,如果成功将输入传递给服务器,则强制客户端向所有输入元素添加命名空间前缀。 (如果客户端忽略了名称空间前缀,则服务器将收到没有输入的空请求)。

因为在我的情况下我的客户端无论如何都无法生成合格的soap请求,所以我必须在服务器端进行更改。

你这样做的方法是添加

[XmlElement(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]

在每个Web方法的每个输入参数前面:

[WebMethod]
public string TestMethod(
    [XmlElement(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]string input1,
    [XmlElement(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]int input2)
{
    /***code here****/
}