【问题标题】:How to provide a C# .Net Web Service without an ‘elementformdefault = “qualified”’ attribute in the WSDL?如何在 WSDL 中提供没有“elementformdefault = “qualified””属性的 C# .Net Web 服务?
【发布时间】:2023-03-03 21:00:01
【问题描述】:

我将为具有给定 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>

网络服务运行良好。

感谢您的支持

【问题讨论】:

  • 不完全清楚... WSDL 应该提供所有命名空间等。如何生成(服务器?)类?
  • 我没有从 WSDL 生成类。我尝试过但失败了:-(最后我创建了一个新的网络服务并构建了所有方法等。
  • 有人知道我在哪里可以获得专业支持来构建 WS?
  • 本网站不为此提供代理。但是网上有足够的教程和演练。您已经找到 WSDL.EXE 了吗?

标签: c# .net web-services wsdl


【解决方案1】:

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

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

elementFormDefault=qualified

在它的模式标记中,如果客户端成功地将输入传递给服务器,它会强制客户端向所有输入元素添加名称空间前缀。 (如果客户端忽略命名空间前缀,服务器将收到没有输入的空请求)。

由于在我的情况下,我的客户端无论如何都无法生成合格的肥皂请求,我必须在服务器端进行更改。

你这样做的方式是添加

[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****/
}

【讨论】:

  • 抱歉让它打开了这么久。这正是我解决它的方法,但我忘了更新。
猜你喜欢
  • 2010-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多