Extraindo o IP do cliente


Em algum momento, talvez gostaríamos de extrair o endereço (IP) do cliente que efetuou a requisição para um serviço, com a finalidade de logging, monitoramento, etc. Felizmente há uma possibilidade para resgatar essa informação e, podemos acessá-la durante a execução de uma operação de um serviço exposto via WCF.

Para isso, há uma classe chamada RemoteEndpointMessageProperty que possui duas propriedades: Address e Port. A instancia desta classe é fornecida pelo contexto da requisição, através da coleção IncomingMessageProperties. Para exemplificar o seu uso, veja o código abaixo:

RemoteEndpointMessageProperty cliente =
    OperationContext.Current.IncomingMessageProperties[RemoteEndpointMessageProperty.Name]
        as RemoteEndpointMessageProperty;

Console.WriteLine(“{0}:{1}”, cliente.Address, cliente.Port);

Como especificado na documentação, essas informações só estarão disponíveis quando o serviço estiver exposto através do protocolo HTTP ou TCP. Além disso, quando a requisição já foi efetuada (como é o caso de operações one-way), essas informações estarão indisponíveis. E, para finalizar, se a requisição passar por intermediários (roteadores), o endereço/porta irá refletir o endereço/porta do último intermediário.

Anúncios

2 comentários sobre “Extraindo o IP do cliente

  1. Muito bom o seu artigo. Porém, eu recebo exception. Verifiquei com o breakpoint e o problema é que o contexto vem nulo. Meu wcf está fazendo binding para webservice. Existe alguma configuração que eu possa ter feito errado ou como posso fazer para solucionar este problema?

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s