Сам спросил, сам ответил...
И так, механизм следующий:
- Нужно создать класс, имплементирующий интерфейс IClientMessageInspector
- Нужно создать класс, имплементирующий интерфейс IEndpointBehavior
- Нужно их между собой подружить
В инспекторе сообщений заголовок задаётся следующим образом:
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() );