web-dev-qa-db-fra.com

Obtention de l'adresse IP du client dans WCF 3.0

Apparemment, vous pouvez facilement obtenir une adresse IP cliente dans WCF 3.5 mais pas dans WCF 3.0. Quelqu'un sait comment?

82
Gaz

Il s'avère que vous pouvez, tant que (a) votre service est hébergé dans un service Web (évidemment) et (b) vous activez le mode AspNetCompatibility, comme suit:

    <system.serviceModel>
            <!-- this enables WCF services to access ASP.Net http context -->
            <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
...
    </system.serviceModel>

Et puis vous pouvez obtenir l'adresse IP en:

HttpContext.Current.Request.UserHostAddress
36
Gaz

Cela ne vous aide pas dans 3.0, mais je peux juste voir des gens trouver cette question et être frustrés parce qu'ils essaient d'obtenir l'adresse IP du client en 3.5. Voici donc du code qui devrait fonctionner:

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;
152
Paul Mrozowski

Vous pouvez le faire si vous ciblez .NET 3.0 SP1.

OperationContext context = OperationContext.Current;
MessageProperties prop = context.IncomingMessageProperties;
RemoteEndpointMessageProperty endpoint = prop[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
string ip = endpoint.Address;

Crédits: http://blogs.msdn.com/phenning/archive/2007/08/08/remoteendpointmessageproperty-in-wcf-net-3-5.aspx

Référence: http://msdn.Microsoft.com/en-us/library/system.servicemodel.channels.remoteendpointmessageproperty.aspx

15
jangofetta