Заголовок SOAP удален во время вызова веб-службы - PullRequest
1 голос
/ 16 февраля 2012

Я тестирую вызов службы на основе SOAP из клиентского приложения .net и сталкиваюсь с некоторыми странными проблемами с исчезающим заголовком SOAP.

Краткое объяснение настройки:

Я использовал WSDL, предоставленный поставщиком веб-сервиса, для создания моих прокси-объектов.В моем коде объявить экземпляр клиента службы, который я хочу вызвать.Создайте полезную нагрузку, необходимую для метода, и затем вызовите метод.

Я определил свой собственный инспектор, который записывает сообщение запроса в текстовый файл в функции BeforeSendRequest, чтобы я мог проверить, что отправляется.

Мой выходной файл содержит заголовок SOAP, определяющий вызываемое действие SOAP:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">urn:actionName</Action>
  </s:Header>
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

Однако, когда я проверяю запрос в Fiddler, я вижу:

POST http://itk1:4848/syncsoap HTTP/1.1
Content-Type: text/xml; charset=utf-8
VsDebuggerCausalityData: uIDPo3+FD6fhly5OnM0GeeaNhJ8AAAAAqHE+abP1+EWcEPeRvh8Oj4EFi5tL0elHlKdqfGJg1AIACQAA
SOAPAction: "urn:actionName"
Host: itk1:4848
Content-Length: 9651
Expect: 100-continue
Connection: Keep-Alive

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body

Кажется, что мое действие было удалено из конверта SOAP и стало основным заголовком, поэтому, когда служба, которую я вызываю, получает запрос, она не может найти действие в ожидаемом месте.

В качестве теста яВместо этого я попытался создать базовый запрос с помощью WebRequest.Create () и опубликовать выходной файл, который я получил ранее из моего инспектора сообщений.Когда это происходит, Fiddler показывает, что заголовок и действие SOAP были сохранены в конверте SOAP.

Я полагаю, что WCF будет полезным и изменяет мой запрос для меня?Как я могу заставить его перестать портить моё сообщение и отправить его так, как оно было изначально построено?

Ответы [ 2 ]

1 голос
/ 22 февраля 2012

Я решил проблему, вручную написав свои собственные заголовки с помощью инспектора сообщений.

, то есть в BeforeSendRequest я сейчас делаю:

request.Headers.Add(MessageHeader.CreateHeader("Action", WSANamespace, _headerInfo.Action))

, которые правильно записывают егос несколькими другими заголовками SOAP, которые мне нужны.

Странно, если я выписываю запрос своим слушателям отладки, я вижу, что конверт теперь содержит 2 заголовка Action, но к тому времени, когда запрос достигает Fiddler, все выглядит нормально с одним действием в конверте -рад оставить исходное действие преобразованием в заголовок HTTP, поскольку служба, которую я вызываю, в любом случае требует этого.

0 голосов
/ 16 февраля 2012

Попробуйте использовать IDispatchMessageFormatter для отладки, как показано на этой ссылке http://blogs.msdn.com/b/carlosfigueira/archive/2011/05/03/wcf-extensibility-message-formatters.aspx

Для понимания этапов в конвейере WCF см. http://msdn.microsoft.com/en-us/magazine/cc163302.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...