2009-06-08 8 views
3

J'ai construit un service ASMX et dans le code qui traite un journal d'erreur qui vient de ELMAH. J'ajoute dans la base de données tous les champs et j'ajoute un peu plus, on est l'adresse IP du client demandé ...Obtenir l'adresse IP du client demandé (message de savon)

Mais je ne peux pas (s'il vous plaît lire, je ne sais pas comment) obtenir cela. ..

Je suis habitué à

string ipAddress = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 
if (ipAddress == "") ipAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; 

mais bien sûr ici, il ne s'applique pas parce que ce n'est pas une demande de HTML, mais une requête SOAP

en-tête ALL_HTTP Je reçois toutes ces informations:

HTTP_CONNECTION:Keep-Alive 
HTTP_CONTENT_LENGTH:440331 
HTTP_CONTENT_TYPE:text/xml; charset=utf-8 
HTTP_EXPECT:100-continue 
HTTP_HOST:www.mydomainname.com 
HTTP_USER_AGENT:Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 2.0.50727.3074) 
HTTP_VSDEBUGGERCAUSALITYDATA:uIDPowJ7s0UYlmhEqcDjxYQT/TQAAAAADlaOOkJ5DUizA7gKLg3YEPur8pFWlaVFmpinSAOBTuIACQAA 
HTTP_SOAPACTION:"http://www. mydomainname.com/webservices/ErrorReportService/ReportErrors" 

Où et comment puis-je obtenir l'adresse IP demandée?

Notez que je ne suis pas d'utiliser tout type d'authentification (encore) ... :)

Répondre

2

Vous devriez être en mesure d'utiliser HttpContext.Current.Request.UserHostAddress, mais ce ne sera pas fiable si la demande La machine est derrière un serveur proxy ou un périphérique NAT. Vous obtiendrez l'adresse du serveur proxy à la place. Je veux que ce soit clair - une adresse IP n'est pas un identifiant unique approprié. Il n'identifie pas un ordinateur. Au mieux, il identifie l'adresse de couche réseau qu'une interface réseau particulière sur un ordinateur particulier utilise à un moment donné. À un moment différent, cette même interface réseau pourrait utiliser une adresse IP différente. À un autre moment, ce même ordinateur peut avoir plusieurs interfaces réseau. Vous ne pouvez pas le dire.

Je me souviens avoir lu que les concepteurs des protocoles TCP/IP ont délibérément précisé qu'une adresse IP ne peut pas être utilisée comme identifiant unique d'un ordinateur. Malheureusement, il semble que peu de gens l'aient lu.

+0

Dans ces circonstances, votre seule sortie réaliste consiste à faire en sorte que le proxy transfère l'adresse IP réelle sur un en-tête personnalisé convenu. Tout dépend si vous avez le contrôle de cela. – annakata

+0

si j'utilise cela, je reçois une adresse IP à partir de 67 et mon IP actuel commence par 87, l'IP hôte commence par 62 ... Je veux obtenir le 87 :-( – balexandre