Веб-сервис WCF без заголовка SOAPAction - PullRequest
3 голосов
/ 02 ноября 2011

Как я могу реализовать веб-сервис в WCF таким образом, чтобы он не требовал, чтобы заголовок SOAPAction присутствовал в запросе, и, таким образом, отправлял вызов, используя имя корневого элемента тела сообщения? По умолчанию для BasicHttpBinding требуется действие SOAP.

Это необходимо для обеспечения совместимости с клиентом, который не использует SOAPActions. Это мое SOAP-сообщение:

<?xml version='1.0' encoding='UTF-8'?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Body>
<messageDeliveryReport xmlns="http://bogus/ns"><status>D</status><systemName>cc</systemName></messageDeliveryReport>
</env:Body></env:Envelope>

и я хочу, чтобы он вызывал операцию 'messageDeliveryReport'. Спасибо!

Ответы [ 2 ]

5 голосов
/ 02 ноября 2011

Это не проблема BasicHttpBinding, это проблема соблюдения стандарта SOAP 1.1 , который гласит:

An HTTP client MUST use this header field when issuing a SOAP HTTP Request.

Так что вы имеете дело с клиентом, который нене соответствует стандарту, существовавшему с 2000 года. Возможно, вы сможете обойти эту проблему, реализовав одну из точек расширяемости WCF, более подробно описанную в статье MSDN Расширение WCF с помощью пользовательского поведения , возможно, либо IDispatchMessageInspector, либо IDispatchOperationSelector, но запрос может даже не зайти так далеко, поскольку сообщение действительно не является действительным запросом SOAP для начала.

3 голосов
/ 02 ноября 2011

Вы можете следовать этому примеру для создания пользовательского поведения для отправки сообщений SOAP в операцию на основе корневого элемента тела сообщения.

...