Какую привязку следует использовать в службе WCF, если клиент использует отправку сообщения SOAP 1.1?

У меня есть служба WCF. Сторонний клиент отправляет службе сообщение SOAP 1.1. Я узнал, что служба может использовать basicHttpBinding для приема сообщений SOAP 1.1, поэтому я настроил свою службу на использование basicHttpBinding. Но клиент получает сообщение об ошибке, как показано ниже.

Я уверен, что нет несоответствия контракта, поэтому я исследую, есть ли несоответствие привязки / безопасности между клиентом и сервером. Кроме того, я протестировал свой сервис из тестового приложения с помощью basicHttpBinding, и он отлично работает. Я не уверен, почему он выдает ошибку при отправке сообщения SOAP 1.1 от стороннего клиента. Буду признателен, если кто-нибудь сможет указать, что еще я должен проверить, или какие-либо вопросы, которые я должен уточнить у стороннего поставщика? Заранее спасибо.

Примечания: Сервис не использует аутентификацию. Третья сторона не является клиентом на базе .NET. У меня есть только один OperationContract, который может использовать клиент. Он не украшен какими-либо специальными атрибутами, кроме [OperationContract]. Пожалуйста, дайте мне знать, если вам понадобится дополнительная информация.

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)

person Jyina    schedule 13.06.2012    source источник
comment
Можете ли вы отредактировать свой вопрос, включив эти детали (используется ли аутентификация, если третья сторона основана на .NET или нет, ваши контракты передаются)?   -  person Channs    schedule 13.06.2012
comment
Я добавил подробности в конце вопроса. Пожалуйста, дайте мне знать, если мне нужно предоставить какие-либо другие подробности. Спасибо.   -  person Jyina    schedule 13.06.2012
comment
Я бы предложил использовать инструмент проверки сети (например, Fiddler) для сравнения запросов, отправляемых вашим тестовым приложением и сторонним клиентом. Или вы также можете проверить запросы вручную. У меня есть сильное подозрение (поскольку я видел это ранее), что клиент третьей части не отправляет запрос SOAP, как ожидалось WCF. Надеюсь это поможет.   -  person Channs    schedule 13.06.2012
comment
Спасибо. Я сравню запросы и посмотрю, в чем отличие.   -  person Jyina    schedule 13.06.2012


Ответы (1)


Я не мог понять, пишете ли вы службу или клиента, но проблема явно либо в том, что клиент не отправляет заголовок HTTP SOAPAction, либо в том, что служба использует soap11, но с некоторым wsaddressing. В этом случае вы должны использовать настраиваемую привязку и определить правильную адресацию в textBindingElmenet.

person Yaron Naveh    schedule 13.06.2012
comment
Написал только сервис. Клиент написан третьей стороной. Прочитав ваш пост, я посмотрел на заголовок сообщения, отправленного клиентом, и он не имеет значения в SoapAction. - person Jyina; 13.06.2012
comment
Content-Length 3069 Через 1.1 proxy-aaa.net.sss.com:8080 (squid) Accept-Encoding gzip Soapaction Connection keep-alive User-Agent Jakarta Commons-HttpClient / 3.0.1 Host requestb.in Cache-Control max-age = 259200 Content-Type text / xml; charset = utf-8 - person Jyina; 13.06.2012
comment
Есть элемент Soapaction, но у него нет значения. Будет ли это проблемой? Спасибо. - person Jyina; 13.06.2012
comment
да, было бы. вы можете создать клиент wcf и посмотреть, какой заголовок мыла он отправляет (вы также можете поискать его в wsdl, но вам нужно понимать структуру). это именно то, что может вызвать эту ошибку - person Yaron Naveh; 13.06.2012
comment
Wcf требует действие мыла, и вы не можете его изменить. Обратите внимание, что рабочее сообщение содержит действие внутри мыльного конверта, а не только как заголовок http. Это может означать, что вашему клиенту также необходимо разместить его в обоих местах. - person Yaron Naveh; 14.06.2012