Пустое действие мыла, когда SAP Solution Manager вызывает WCF Webservice - PullRequest
2 голосов
/ 12 января 2012

Контекст:

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?

Что я делаю неправильно?

...