LOGO UOL HOST

Como adicionar um cabeçalho "User-Agent" a chamadas de serviço WCF?

Quando são feitas chamadas de serviços WCF através de um cliente desse serviço, os cabeçalhos necessários para as trocas de mensagens são gerados automaticamente no lado do cliente, porém em alguns casos, por questões variadas, são necessários cabeçalhos adicionais.

Na arquitetura de hospedagem do UOL Host, por questões de segurança, é necessário que toda request HTTP recebida possua um cabeçalho “User-Agent” com um valor. No caso de serviços WCF, por padrão esse cabeçalho não é enviado e, para que os serviços funcionem corretamente, é necessário adicioná-lo.

Existem várias formas de se adicionar cabeçalhos a uma requisição de serviço WCF, abaixo exemplificamos a implementação de uma forma simples e bastante utilizada para esse propósito.

A solução consiste na implementação de um inspetor de mensagens que é adicionado como um comportamento ao cliente. Esse inspetor terá acesso a todas as mensagens enviadas e recebidas pelo cliente e adicionará o cabeçalho “User-Agent” nas mensagens enviadas.

Implementação:

 

1 – Na solução cliente, criar uma classe que implemente a interface IClientMessageInspector e outra que implemente a interfaceIEndpointBehavior:

 

// Inspetor de mensagens usado para adicionar o cabeçalho HTTP User-Agent nas chamadas de serviço WCF

publicclass ClientMessageInspector : IClientMessageInspector

{

    public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel)

    {

        string userAgent = "Meu User-Agent";

 

        if (request.Properties.Count == 0 || request.Properties[HttpRequestMessageProperty.Name] == null)

        {

           var prop = new HttpRequestMessageProperty();

           prop.Headers["User-Agent"] = userAgent;

           request.Properties.Add(HttpRequestMessageProperty.Name, prop);

        }

        else

{              ((HttpRequestMessageProperty)request.Properties[HttpRequestMessageProperty.Name]).Headers["User-Agent"] = userAgent;

        }

        return null;

     }

 

     public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply, object correlationState)

     {

     }

}

 

// Comportamento que adiciona headers a uma chamada WCF, esse comportamento deve ser adicionado ao endpoint

    publicclass AddUserAgentEndpointBehavior : IEndpointBehavior

    {

        public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)

        {

            clientRuntime.MessageInspectors.Add(new ClientMessageInspector());

        }

 

        public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)

        {

        }

 

        public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)

        {

        }

 

        public void Validate(ServiceEndpoint endpoint)

        {

        }

    }

 

 

2 – Adicionar o comportamento, que é definido na classe AddUserAgentEndpointBehavior, ao endpoint da referência ao serviço WCF:

 

ServiceReference1.Service1Client referencia = new ServiceReference1.Service1Client();     

referencia.Endpoint.Behaviors.Add(new AddUserAgentEndpointBehavior());

 

Assuntos recentes

Atendimento Online

Somente para assinantes

Fale com um dos nossos atendentes especializados via chat ou envie um e-mail.

Iniciar Chat ou Enviar E-mail

Central de atendimento

Atendimento 24 horas por dia, 7 dias por semana.

Se preferir você pode entrar em contato com a nossa central de atendimento

4003 9011 Capítais e regiões metropolitanas

0800 881 9011 Demais localidades