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

ylamdve6  于 2022-11-15  发布在  C#
关注(0)|答案(1)|浏览(194)

我将使用给定的WSDL为客户端提供一个Web服务。不幸的是,我不能告诉序列化程序接受非限定的elementForm。
我寻找将elementFormDefault设置为“unqualified”甚至“None”的方法来完全隐藏它
我会收到类似

<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>

Web服务工作正常。
感谢您的支持

iyfamqjs

iyfamqjs1#

虽然这是一个死问题,从2年前,我仍然想回答它,因为这是我的第一个相关的搜索结果时,我遇到了完全相同的问题。
通过.asmx?wsdl生成的WSDL文件具有一个属性

elementFormDefault=qualified

在它的schema标记中,如果客户端要成功地将其输入传递到服务器,则强制客户端向所有输入元素添加名称空间前缀。(如果客户端忽略名称空间前缀,则服务器将收到没有输入的空请求)。
因为在我的例子中,我的客户端无论如何都不能生成一个合格的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****/
}

相关问题