Служба WCF SOAP, один wsdl, пустое пространство имен в soap: ошибка, не соответствует WS-I, BP2019

При кодировании службы SOAP в C#, ее запуске и последующем получении WSDL из службы с параметром? Singlewsdl сгенерированный WSDL имеет пустой атрибут пространства имен в элементе, что портит соответствие WSI (проверено с помощью SoapUI) и приводит к коду ошибки BP2019, указывая на недопустимое пространство имен в мыльной вине.

Метод службы находится в базовом интерфейсе, из которого службы получают свои собственные интерфейсы.

Определение в интерфейсе сервиса:

[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();

WSDL, сгенерированный службой с? Singlewsdl, содержит пустой атрибут пространства имен:

<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 вообще не должен иметь атрибута пространства имен.

Могу ли я что-нибудь сделать с этим?

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

Другие вопросы по тегам