2008-09-24 6 views

Répondre

81
+3

Si vous obtenez System.InvalidOperationException "HttpContext n'est pas disponible Cette classe ne peut être utilisée que dans le contexte d'une requête ASP.NET." \t HttpContext in Context ne sera pas disponible sans ajouter des éléments au fichier web.config. . Menace

2

Le HttpContext est effectivement disponible à l'intérieur de la classe de base WebService, donc il suffit d'utiliser Context.Request (ou HttpContext.Current qui souligne également le contexte actuel) pour obtenir l'accès aux membres fournis par le HttpRequest.

4

Essayez ceci:

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

N'a pas essayé dans un WEBMETHOD, mais je l'utilise dans HttpRequests standards

6

Essayez:

Context.Request.UserHostAddress 
8

Juste une mise en garde. Les adresses IP ne peuvent pas être utilisées pour identifier les clients de manière unique. NAT Firewalls et les proxies d'entreprise sont partout, et cachent de nombreux utilisateurs derrière une seule adresse IP.

+0

De plus, tous les en-têtes HTTP peuvent être usurpés facilement. Le même code qui met des données valides dans eux peut être utilisé pour y mettre des données invalides. – JessieArr

0

J'ai fait la fonction suivante:

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"; 
     } 
} 

Ce travail que dans l'intranet, si vous avez un proxy ou natting vous devriez étudier si l'adresse IP d'origine est déplacé quelque part ailleurs dans le paquet http.