Как использовать сервис SOAP с пользовательским заголовком - PullRequest
0 голосов
/ 05 апреля 2019

Мне нужно использовать сервис SOAP от поставщика.Я создал прокси-сервис с WSDL в visual studio, создал экземпляр класса клиента, вызвал метод action и получил ответ.Все работает нормально, пока продавец не запросит токен доступа в заголовке мыльного конверта.Я могу получить токен доступа от них при другом вызове службы, но как мне добавить его в заголовок запроса мыла?
Вот структура заголовка от поставщика:

<SOAP:Header> 
    <SOAP-SEC:Security SOAP:mustUnderstand="1">
      <wsse:SecuredKey ValueType="..." EncodingType="wsse:Base64Binary">
        {ACCESS TOKEN}
      </wsse:SecuredKey>
    </SOAP-Sec:Security>
  </SOAP:Header>
  <SOAP:Body/>
</SOAP:Envelop>

1 Ответ

0 голосов
/ 05 апреля 2019

Безусловно, самый простой способ сделать это - использовать строку замены в шаблоне.Сохраните сообщение как ресурс в своем проекте (например, в Resources.resx или сохраните как файл и установите для действия сборки для встроенного ресурса).Шаблон выглядит следующим образом:

<SOAP:Header> 
    <SOAP-SEC:Security SOAP:mustUnderstand="1">
      <wsse:SecuredKey ValueType="..." EncodingType="wsse:Base64Binary">
        {ACCESS TOKEN}
      </wsse:SecuredKey>
    </SOAP-Sec:Security>
  </SOAP:Header>
  <SOAP:Body/>
</SOAP:Envelop>

Загрузите шаблон в виде строки из вашего ресурса, затем вызовите веб-службу для получения токена доступа, а затем выполните и замените {ACCESS TOKEN} на фактическийтокен доступаТеперь вы можете отправить мыльное сообщение, используя, например, System.Net.Http.HttpClient или System.Net.WebClient.

Пример использования WebClient

using (var client = new WebClient())
{
    var result = client.UploadString("http://your.target/endpoint", yourXDocument.ToString(SaveOptions.DisableFormatting));                
    return XDocument.Parse(result);
}

SaveOptions.DisableFormatting не пытается печатать XDocument, что может быть важно при использовании подписанного XML-документа с WS-Security.Не уверен, что это применимо в вашем случае.

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