Контекст:
SAP Solution Manager (назовем его SolMan) предоставляет веб-сервис SOAP, где сторонняя организация может звонить для взаимодействия с ним.Стороннее приложение может также реализовать тот же интерфейс веб-сервиса, чтобы SolMan мог взаимодействовать в другом направлении.Мне нужно взаимодействовать с SolMan в обоих направлениях.Мой веб-сервис - это сервис WCF, основанный на интерфейсе и типах, сгенерированных из WSDL веб-сервиса SolMan с VS2010 «Добавить ссылку на сервис».
Задача # 1
В WSDL все объявленные операции имеют soapAction = "".Когда интерфейс контракта на обслуживание был сгенерирован из VS2010, все OperationContractAttribute имеют Action = "", ReplyAction = "*".Поскольку более чем один OperationContract имеет одно и то же действие (пустая строка), веб-служба не работает, исключение составляет:
[InvalidOperationException: операции AcceptIncidentProcessing и AddInfo имеют одинаковое действие ().Каждая операция должна иметь уникальное значение действия.]
Это нормально?Есть еще один способ исправить это, кроме удаления всех объявлений Action = "" из сгенерированного интерфейса ServiceContract?
Задача # 2
Я удалил все пустые строки Actions из сгенерированного интерфейса ServiceContract.Теперь я могу проверить WSDL, сгенерированный моим веб-сервисом, и вызвать его с помощью моего клиента .net wcf.SolMan не может вызвать мой веб-сервис, после включения MessageLogging в моем web.config, я обнаружил, что мой сервис вышел из строя с:
<s:Fault>
<faultcode xmlns:a="http://schemas.microsoft.com/ws/2005/05/addressing/none" xmlns="">a:ActionNotSupported</faultcode>
<faultstring xml:lang="en-CA" xmlns="">The message with Action '' cannot be processed at the receiver, due to a ContractFilter mismatch at the EndpointDispatcher. This may be because of either a contract mismatch (mismatched Actions between sender and receiver) or a binding/security mismatch between the sender and the receiver. Check that sender and receiver have the same contract and the same binding (including security requirements, e.g. Message, Transport, None).</faultstring>
</s:Fault>
Действительно, проверка сообщения запроса SOAP показывает, что soapaction присутствует в заголовках HTTP, но пустой, и это действие также присутствует в заголовках SOAP, и оно также пусто.
Итак, я нашел пост о примере Microsoft 1DispatchByBodyBehavior1, дал ему попытку и воспроизвел запрос http с успехом Fiddler без успеха,Единственный способ заставить его работать - это удалить <Action>
и <To>
из заголовков SOAP в Fiddler.SolMan действительно продолжит передавать эти заголовки.
Действительно ли SolMan не устанавливает никаких действий при вызове веб-службы SOAP?
Что я делаю неправильно?