Служба 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