2008-09-24 18 views

Respuesta

81
+3

Si obtiene System.InvalidOperationException "HttpContext no está disponible. Esta clase solo se puede usar en el contexto de una solicitud ASP.NET". \t HttpContext in Context no estará disponible sin agregar algunas cosas al web.config. . Menace

2

El HttpContext es realmente disponible dentro de la clase WebService base, por lo que sólo tiene que utilizar Context.Request (o HttpContext.Current que también apunta al contexto actual) para obtener acceso a los miembros proporcionados por el HttpRequest.

4

Prueba esto:

string ipAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; 

no lo he probado en un webMethod, pero lo uso en HttpRequests estándar

6

Probar:

Context.Request.UserHostAddress 
8

Sólo una advertencia. Las direcciones IP no se pueden usar para identificar de manera exclusiva a los clientes. Los cortafuegos NAT y los proxies corporativos están en todas partes, y ocultan a muchos usuarios detrás de una sola IP.

+0

Además, todos los encabezados HTTP se pueden falsificar fácilmente. El mismo código que pone datos válidos en ellos se puede utilizar para poner datos no válidos en ellos. – JessieArr

0

hice la siguiente función:

static public string sGetIP() 
{ 
    try 
    { 
     string functionReturnValue = null; 

     String oRequestHttp = 
      WebOperationContext.Current.IncomingRequest.Headers["User-Host-Address"]; 
     if (string.IsNullOrEmpty(oRequestHttp)) 
     { 
      OperationContext context = OperationContext.Current; 
      MessageProperties prop = context.IncomingMessageProperties; 
      RemoteEndpointMessageProperty endpoint = 
       prop[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty; 
      oRequestHttp = endpoint.Address; 
     } 
     return functionReturnValue; 
    } 
    catch (Exception ex) 
     { 
      return "unknown IP"; 
     } 
} 

Este trabajo sólo en Intranet, si tiene alguna proxy o natting se debe estudiar si el período de investigación original se mueve a otro lugar en el paquete HTTP.

Cuestiones relacionadas