title: Get Client IP address using WCF 4.5 RemoteEndpointMessageProperty in load balancing situation
body: <p>I have hosted WCF 4.5 Restful service in IIS and I am trying to use
  RemoteEndpointMessageProperty to get the IP address of the client who
  consumes the service.</p>
  
  <p><strong>Code 1:</strong></p>
  
  <pre><code>private string GetClientIP()
  {
    OperationContext context = OperationContext.Current;
    MessageProperties prop = context.IncomingMessageProperties;
    RemoteEndpointMessageProperty endpoint =
           prop[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
    string ip = endpoint.Address;
    return ip;
  }
  </code></pre>
  
  <p><strong>Code 2:</strong></p>
  
  <pre><code>private string GetClientIP()
  {
    string retIp = string.Empty;
    OperationContext context = OperationContext.Current;
    MessageProperties prop = context.IncomingMessageProperties;
    HttpRequestMessageProperty endpointLoadBalancer =
    prop[HttpRequestMessageProperty.Name] as HttpRequestMessageProperty;
    if (endpointLoadBalancer.Headers["X-Forwarded-For"] != null)
    {
      retIp = endpointLoadBalancer.Headers["X-Forwarded-For"];
    }
    if (string.IsNullOrEmpty(retIp))
    {
      RemoteEndpointMessageProperty endpoint =
                  prop[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
                  retIp = endpoint.Address;
    }
    return retIp;
  }
  </code></pre>
  
  <p>However, since the WCF service is hosted in IIS behind a load balancer, the
  IP address I got is always the IP of the load balancer.
  Is there any way to get around this so that I can get the true IP of the
  client?</p>