Aparentemente, puede obtener fácilmente una dirección IP de cliente en WCF 3.5 pero no en WCF 3.0. Alguien sabe como?
Respuestas:
Esto no le ayuda en 3.0, pero puedo ver que la gente encuentra esta pregunta y se siente frustrada porque están tratando de obtener la dirección IP del cliente en 3.5. Entonces, aquí hay un código que debería funcionar:
using System.ServiceModel;
using System.ServiceModel.Channels;
OperationContext context = OperationContext.Current;
MessageProperties prop = context.IncomingMessageProperties;
RemoteEndpointMessageProperty endpoint =
prop[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
string ip = endpoint.Address;
Resulta que puede, siempre que (a) su servicio esté alojado en un servicio web (obviamente) y (b) habilite el modo AspNetCompatibility, de la siguiente manera:
<system.serviceModel>
<!-- this enables WCF services to access ASP.Net http context -->
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
...
</system.serviceModel>
Y luego puede obtener la dirección IP mediante:
HttpContext.Current.Request.UserHostAddress
HttpContext.Current.Request.UserHostAddress
Puede hacerlo si su objetivo es .NET 3.0 SP1.
OperationContext context = OperationContext.Current;
MessageProperties prop = context.IncomingMessageProperties;
RemoteEndpointMessageProperty endpoint = prop[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
string ip = endpoint.Address;
Créditos: http://blogs.msdn.com/phenning/archive/2007/08/08/remoteendpointmessageproperty-in-wcf-net-3-5.aspx
Referencia: http://msdn.microsoft.com/en-us/library/system.servicemodel.channels.remoteendpointmessageproperty.aspx