Может ли веб-служба .NET 2.0 обрабатывать вызов от клиента, когда отсутствует SoapAction? - PullRequest
1 голос
/ 14 июля 2010

У нас есть веб-сервис .NET 2.0 (файл .ASMX). Этот веб-сервис вызывается клиентом Java, и они не передаются в заголовке SoapAction.

Это приводит к сбою нашего веб-сервиса с ошибкой:: "Сервер не распознал значение заголовка HTTP SOAPAction:."

Нет никаких шансов убедить команду разработчиков, отвечающую за вызов Java-клиента, включить заголовок SoapAction.

Есть ли способ решить эту проблему с моей стороны?

Можно ли запретить .NET выдавать эту ошибку при отсутствии SoapAction? Могу ли я программно направить вызов на правильный WebMethod?

Что-то вроде этого псевдо-кода,

if (Header.SoapAction == String.Empty) then MyWebMethod();

1 Ответ

1 голос
/ 14 июля 2010

Согласно спецификации SOAP 1.1 это требуется для HTTP-клиентов.

6.1 SOAP HTTP-запрос

Хотя SOAP может использоваться в сочетание с различными HTTP методы запроса, только эта привязка определяет SOAP в запросах HTTP POST (см. раздел 7 о том, как использовать SOAP для RPC и раздел 6.3 о том, как использовать HTTP Extension Framework).

6.1.1 Поле заголовка HTTP SOAPAction

Заголовок HTTP-запроса SOAPAction. поле может быть использовано для указания намерение SOAP HTTP-запроса. значение - это URI, идентифицирующий намерение. SOAP не накладывает никаких ограничений на формат или специфика URI или что это разрешимо. HTTP-клиент ДОЛЖЕН использовать это поле заголовка, когда выдача SOAP HTTP-запроса.

Источник http://www.w3.org/TR/2000/NOTE-SOAP-20000508/#_Toc478383528

Из быстрого Google кажется, что это общая проблема с Java и Axis, но есть некоторые споры, требуется ли это. Может ли это помочь вам убедить разработчиков Java, что им нужно реализовать заголовок?

Редактировать:

Правильный URI для вашего SoapAction заголовка http определен в документе WSDL.

Перейти http://mydomain.com/myservice.asmx?wsdl

Найдите элемент wsdl: operation для метода, который вы вызываете, у него должен быть дочерний элемент soap: operation, у которого есть атрибут soapaction, там есть URI, который вы должны использовать. В тестируемом веб-сервисе это выглядит как пространство имен, за которым следует / и имя метода следующим образом.

<wsdl:operation name="AddTwoNumbers">
  <soap:operation soapAction="http://mydomain.com/myservice/AddTwoNumbers" style="document"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...