【问题标题】:WCF SOAP service, single wsdl, empty namespace in soap:fault, not WS-I compliant, BP2019WCF SOAP 服务,单个 wsdl,soap 中的空命名空间:故障,不符合 WS-I,BP2019
【发布时间】:2015-01-12 13:24:34
【问题描述】:

当使用 C# 编写 SOAP 服务,运行它,然后使用 ?singlewsdl 选项从服务中检索 WSDL 时,生成的 WSDL 在元素中有一个空的命名空间属性,破坏 WSI 合规性(使用 SoapUI 检查)并导致错误代码BP2019,表示soap故障中的命名空间非法。

服务方法位于基础接口中,服务从中派生出自己的接口。

定义在服务接口中:

[OperationContract( 
    Action = "http://mynamespace.com/services/2014/06/23/MyBaseContract/GetInterfaceVersionRequest", 
    ReplyAction = "http://mynamespace.com/services/2014/06/23/MyBaseContract/GetInterfaceVersionResponse" )]
[FaultContract(typeof(string), Name="NonsenseFault")]
string GetInterfaceVersion();

使用 ?singlewsdl 的服务生成的 WSDL 包含一个空的命名空间属性:

<wsdl:operation name="GetInterfaceVersion">
    <soap:operation soapAction="http://mynamespace.com/services/2014/06/23/MyBaseContract/GetInterfaceVersionRequest" style="document"/>
    <wsdl:input>
        <soap:body use="literal"/>
    </wsdl:input>
    <wsdl:output>
        <soap:body use="literal"/>
    </wsdl:output>
    <wsdl:fault name="NonsenseFault">
        <soap:fault use="literal" name="NonsenseFault" namespace=""/> <!-- spoils WS-I compliance! -->
    </wsdl:fault>
</wsdl:operation>

根据 WS-I 规则,soap:fault 元素根本不能有命名空间属性。

我可以对此做些什么吗?

【问题讨论】:

  • 它和?wsdl做同样的事情吗?
  • 不,它不与 ?wsdl 一起使用,但我希望 ?singlewsdl 只有一个文件,而不是与各种 xsd 混淆。顺便说一句,当我在 SoapUI 中仅从 ?wsdl 创建项目时,它不会创建任何方法调用。
  • 那里发生了一些奇怪的事情。您应该尝试用更简单的情况重现问题。特别是,我想知道它是否对所有故障合同都这样做。我担心?wsdl?singleWsdl 之间的区别。

标签: wcf soap wsdl fault ws-i


【解决方案1】:

您可以通过设置FaultContract 属性Namespace 属性来解决此问题。

[FaultContract(typeof(string), Name="NonsenseFault", Namespace="http://my.nonsense.fault")]

http://msdn.microsoft.com/en-us/library/system.servicemodel.faultcontractattribute(v=vs.110).aspx

【讨论】:

  • 根据 WS-I 规范,它应该根本没有命名空间。而当我指定命名空间时,soap:fault 中的命名空间属性仍然为空。
  • 您可以保存生成的 wsdl,调整命名空间,使用“合同优先”的方法导入测试项目,然后查看原始代码和自动生成的代码之间的差异。
  • 我想使用代码优先的方法,只通过接口和属性定义服务,而不用编辑 WSDL 并从中创建契约。事实上,手动删除空的 Namespace 属性并获得符合 WS-I 的 WSDL 很容易,但这不是我想要的。
猜你喜欢
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 2012-07-29
  • 2021-12-29
  • 1970-01-01
相关资源
最近更新 更多