如何在 WSDL 中提供没有“elementformdefault = “qualified””属性的 C# .Net Web 服务?
How to provide a C# .Net Web Service without an ‘elementformdefault = “qualified”’ attribute in the WSDL?
我将为具有给定 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 服务工作正常。
感谢您的支持
虽然这是一个两年前的死问题,但我仍然想回答这个问题,因为这是我遇到完全相同问题时的第一个相关搜索结果。
通过 .asmx?wsdl 生成的 WSDL 文件有一个属性
elementFormDefault=qualified
在它的模式标记中,如果客户端成功将输入传递给服务器,它会强制客户端向所有输入元素添加名称空间前缀。 (如果客户端无论如何忽略名称空间前缀,服务器将收到没有输入的空请求)。
因为在我的情况下,无论如何我的客户端都无法生成合格的 soap 请求,所以我必须在服务器端进行更改。
你这样做的方法是添加
[XmlElement(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
在每个网络方法的每个输入参数前面:
[WebMethod]
public string TestMethod(
[XmlElement(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]string input1,
[XmlElement(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]int input2)
{
/***code here****/
}
我将为具有给定 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 服务工作正常。
感谢您的支持
虽然这是一个两年前的死问题,但我仍然想回答这个问题,因为这是我遇到完全相同问题时的第一个相关搜索结果。
通过 .asmx?wsdl 生成的 WSDL 文件有一个属性
elementFormDefault=qualified
在它的模式标记中,如果客户端成功将输入传递给服务器,它会强制客户端向所有输入元素添加名称空间前缀。 (如果客户端无论如何忽略名称空间前缀,服务器将收到没有输入的空请求)。
因为在我的情况下,无论如何我的客户端都无法生成合格的 soap 请求,所以我必须在服务器端进行更改。
你这样做的方法是添加
[XmlElement(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
在每个网络方法的每个输入参数前面:
[WebMethod]
public string TestMethod(
[XmlElement(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]string input1,
[XmlElement(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]int input2)
{
/***code here****/
}