WCF SOAP 服务,单个 wsdl,soap:fault 中的空命名空间,不符合 WS-I 标准,BP2019



当用 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 元素必须具有命名空间属性。

我能对此做些什么吗?

您可以通过设置 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

相关内容

  • 没有找到相关文章

最新更新