2015-01-29 3 views
3

Я пытался вызвать сторонний веб-сервис из .NET-клиента. Я должен был установить некоторые пользовательские заголовки для каждого запроса, чтобы соответствовать их требованиям к аутентификации.Заголовок SOAP не понятен клиенту .NET при вызове Webservice

Я использовал this answer для того, чтобы меня, чтобы получить значение заголовка запроса, чтобы выглядеть так:

<?xml version="1.0" encoding="UTF-8"?> 
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Header> 
     <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" s:mustUnderstand="0"> 
     <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="UsernameToken-2"> 
      <wsse:Username>Jimbob</wsse:Username> 
      <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[email protected]</wsse:Password> 
     </wsse:UsernameToken> 
     </wsse:Security> 
    </s:Header> 
    <s:Body> 
    ... 
    </s:Body> 
</s:Envelope> 

(я делаю это, установив раздел заказа <endpoint><headers /></endpoint> в конфигурации)

I проверили запрос через Fiddler и отправили правильные значения заголовка, а веб-сервис вернул ожидаемые результаты.

Однако, клиент бросает следующее исключение, когда он получает результат:

System.ServiceModel.ProtocolException: Заголовок «Безопасность» из пространства имен «http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd» не было понято получателем этого сообщение, в результате чего сообщение не обрабатывается. Эта ошибка обычно указывает, что отправитель этого сообщения включил протокол связи, который получатель не может обработать. Убедитесь, что конфигурация привязки клиента соответствует привязке службы.

Соответствующая часть repsonse (от Скрипач) заключается в следующем:

<?xml version="1.0" encoding="UTF-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Header> 
     <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" soap:mustUnderstand="1"> 
     <wsse:UsernameToken wsu:Id="UsernameToken-371676"> 
      <wsse:Username>SOMEUSERTOKEN</wsse:Username> 
      <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">SOMEUSERTOKEN</wsse:Password> 
     </wsse:UsernameToken> 
     </wsse:Security> 
    </soap:Header> 
    <soap:Body> 
    ... 
    <soap:Body> 
</soap:Envelope> 

В основном я теперь потерял. I Предположим, Мне нужно выполнить некоторую инспекцию сообщений, чтобы обозначить этот заголовок как понятый, но для толкования результата (который я уже получаю с веб-службы) довольно тяжелый подъем.

Любая помощь очень ценится.

+0

Я считаю, что это проблема с поставщиком услуг, где они возвращая '' атрибут неправильно. – Nagoh

ответ

0

Если вы просто хотите сделать аутентификацию, я использовал следующий код для моего консольного приложения C#, и он сработал. Я использовал этот код в файле конфигурации, хотя при <system.serviceModel> -><client> -><endpoint>

<headers> 
    <wsse:Security mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" > 
    <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
     <wsse:Username>SOMEUSERTOKEN</wsse:Username> 
     <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">SOMEUSERTOKEN</wsse:Password> 
    </wsse:UsernameToken> 
    </wsse:Security> 
</headers> 
Смежные вопросы