2010-08-28 8 views
21

Hey, ¿cómo obtener la dirección IP de la persona que hace la petición en algo como lo siguiente:WCF 4 Rest Obtención de IP de la solicitud?

[ServiceContract]  
    [AspNetCompatibilityRequirements(RequirementsMode = 
    AspNetCompatibilityRequirementsMode.Required)]  
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]   
    public partial class UsersService 
    {       
     [WebInvoke(UriTemplate = "", Method = "PUT")]   
     public User AddNewUser(User newUser) 
     {    
      // code goes here including GETTING AN IP?? 
     } 

Gracias!

Respuesta

38

uso interior AddNewUser siguiente fragmento:

OperationContext context = OperationContext.Current; 
MessageProperties messageProperties = context.IncomingMessageProperties; 
RemoteEndpointMessageProperty endpointProperty = 
    messageProperties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty; 

ejemplo RemoteEndpointMessageProperty ofrece Dirección y propiedades del puerto.

+1

El problema es que a menos que algo haya cambiado en .NET 4, es realmente doloroso conseguir OperationContext cuando se usa WebHttpBinding. Pude hacer creando un MessageInspector, pero se requiere salir un poco de aro saltando. –

+0

No estoy seguro de qué quiere decir con eso. OperationContext debe estar disponible en cualquier llamada WCF, incluso si se trata de un servicio REST expuesto en WebHttpBinding. Lo probé en WCF 4 y funciona. –

+0

En .Net 3.5 con WebHttpBinding se podía acceder a WebOperationContext, pero OperationContext no estaba disponible directamente. Me alegra saber que lo arreglaron en 4.0. –

Cuestiones relacionadas