При кодировании службы SOAP на C#, запуске ее и извлечении WSDL из службы с помощью опции singlewsdl, сгенерированный WSDL имеет пустой атрибут пространства имен в элементе, нарушая соответствие WSI (проверяется с помощью SoapUI) и в результате появляется код ошибки BP2019, указывающий на незаконное пространство имен в ошибке мыла.WCF SOAP service, single wsdl, пустое пространство имен в мыле: ошибка, не совместимая с WS-I, 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, мыло: элемент ошибки не должен иметь атрибут пространства имен вообще.
Могу ли я что-нибудь предпринять?
делают ли то же самое с '? Wsdl'? –
Нет, это не с? Wsdl, но я хочу, чтобы singlewsdl имел только один файл и не путался с различными xsds. Кстати, когда я создаю проект в SoapUI только с помощью wsdl, он не вызывает вызовы методов. –
Что-то странное происходит там. Вы должны попытаться воспроизвести проблему с более простым случаем. В частности, мне интересно, делает ли это это для всех контрактов на разлом. Меня беспокоит разница между '? Wsdl' и'? SingleWsdl'. –