Действия WCF Soap в заголовке HTTP или заголовке SOAP?
Я немного смущен тем, как SOAPAction реализуется в WCF (и в других средах веб-сервисов).
В тестовом клиенте у меня есть Client Message Inspector, настроенный для захвата как сообщения SOAP, так и любых HTTP-заголовков, которые отправляются с запросом. По крайней мере, здесь, в инспекторе клиентских сообщений, действие отображается как элемент в заголовке SOAP:
<s:Header>
<Action ... >http://myurl.com/2009/11/MyService/MyMethod</Action>
Однако, если я просматриваю запрос в Fiddler, элемент Action
отсутствует, и вместо этого теперь есть дополнительная запись в заголовках HTTP:
SOAPAction: "http://myurl.com/2009/11/MyService/MyMethod"
Может ли кто-нибудь объяснить, что происходит, черт возьми?
Спасибо!
Ответы
Ответ 1
Это проблема, когда WCF не соответствует стандартам.
SOAP 1.1 использует заголовок SOAPAction, чтобы решить, какой метод вызывать, но это было немного беспорядочно, поскольку имя метода было встроено в другое место в сообщении.
SOAP 1.2 разрешил это и добавил действие в заголовок типа контента и не одобрил заголовок SOAPAction (хотя теперь он является необязательным для тех клиентов, которые все еще хотят его отправить).
Подробную информацию см. на странице o'reilly.
Ответ 2
Скорее всего, вы видите разницу между SOAP 1.1 и SOAP 1.2.
Ответ 3
Мне кажется, что эти два эквивалента, нет? Я думаю, что Fiddler просто интерпретирует этот SOAP-заголовок ", называя его" SOAPAction ". Значение похоже на то же, нет?
Что вы получаете от Client Message Inspector - это необработанные XML-данные (необработанный формат сообщения SOAP), когда он перемещается по медному проводу (или оптоволокну). То, что дает Fiddler, представляет собой HTTP-ориентированную интерпретацию того же XML-сообщения на более высоком уровне, я бы сказал.
Судя по другим сообщениям и статьям в блогах, которые я нашел на Fiddler и SOAP (например, это сообщение в блоге - проверьте "Sample Capture" "раздел ближе к концу), мне кажется, что Fiddler будет выделять заголовки SOAP и интерпретировать/показывать их в пользовательском формате, оставляя только тело SOAP, которое будет отображаться как тело отображаемого сообщения.
Есть ли настоящая техническая проблема? Или просто вопрос о том, как интерпретировать два формата?
Ответ 4
Включение SOAP-действия в HTTP-заголовке является частью спецификации SOA, и WCF просто реализует спецификацию SOAP в этом случае.
Читайте здесь: http://www.w3.org/TR/2000/NOTE-SOAP-20000508/#_Toc478383528