Преимущество в том, что оно применяется к каждому вызову.
Создайте класс, который реализует IClientMessageInspector . В методе BeforeSendRequest добавьте свой пользовательский заголовок к исходящему сообщению. Это может выглядеть примерно так:
public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel)
{
HttpRequestMessageProperty httpRequestMessage;
object httpRequestMessageObject;
if (request.Properties.TryGetValue(HttpRequestMessageProperty.Name, out httpRequestMessageObject))
{
httpRequestMessage = httpRequestMessageObject as HttpRequestMessageProperty;
if (string.IsNullOrEmpty(httpRequestMessage.Headers[USER_AGENT_HTTP_HEADER]))
{
httpRequestMessage.Headers[USER_AGENT_HTTP_HEADER] = this.m_userAgent;
}
}
else
{
httpRequestMessage = new HttpRequestMessageProperty();
httpRequestMessage.Headers.Add(USER_AGENT_HTTP_HEADER, this.m_userAgent);
request.Properties.Add(HttpRequestMessageProperty.Name, httpRequestMessage);
}
return null;
}
Затем создайте поведение конечной точки, которое применяет инспектор сообщений к клиентской среде выполнения. Вы можете применить поведение через атрибут или через конфигурацию, используя элемент расширения поведения.
Вот отличный пример того, как добавить HTTP-заголовок user-agent ко всем сообщениям запроса. Я использую это в некоторых из моих клиентов. Вы также можете сделать то же самое на стороне службы, реализовав IDispatchMessageInspector .
Это то, что вы имели в виду?
Обновление: Я нашел этот список функций WCF, которые поддерживаются компактной средой. Я считаю, что инспекторы сообщений классифицируются как «Расширяемость каналов», которые, согласно этому сообщению, поддерживаются компактной структурой.