VariusRain
@VariusRain
музыкант-программист-конструктор

Как задать кастомные заголовки при каждом запросе по SOAP(WCF)?

Подключил к проекту WSLD'ку через Проект->Подключить ссылку на службу.
Сгенерировались объекты, всё прекрасно. Не прекрасно то, что СОАП сервис, к которому я обращаюсь, не поддерживает стандартную авторизацию через указание у объекта Creditials, а просит запросить метод Login, возвращает токен и этот токен я должен прописать в качестве хэдера к каждому запросу, который я буду отправлять впоследствии.

Буду признателен за любую подсказу, как это можно сделать!
  • Вопрос задан
  • 79 просмотров
Решения вопроса 1
VariusRain
@VariusRain Автор вопроса
музыкант-программист-конструктор
Сам спросил, сам ответил...

И так, механизм следующий:
  1. Нужно создать класс, имплементирующий интерфейс IClientMessageInspector
  2. Нужно создать класс, имплементирующий интерфейс IEndpointBehavior
  3. Нужно их между собой подружить


В инспекторе сообщений заголовок задаётся следующим образом:
public object BeforeSendRequest( ref Message request, IClientChannel channel ) {
			MessageHeader header = MessageHeader.CreateHeader( "authenticate", "NS", "value" );
			request.Headers.Add( header );
	
			Console.WriteLine( "BeforeSendRequest" );
			return null;
		}


Затем инспектор привязывается к поведению:
public void ApplyClientBehavior( ServiceEndpoint endpoint, ClientRuntime clientRuntime ) {
			clientRuntime.ClientMessageInspectors.Add( new ClientMessageInspector() );
		}


И наконец, класс поведения нужно привязать к клиенту
client = new ApiSoapPortClient();
client.Endpoint.EndpointBehaviors.Add( new CustomBehavior() );
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы