it-swarm-eu.dev

Ottenere l'indirizzo IP del client in WCF 3.0

Apparentemente puoi facilmente ottenere un indirizzo IP client in WCF 3.5 ma non in WCF 3.0. Qualcuno sa come?

82
Gaz

Si scopre che puoi, a condizione che (a) il tuo servizio sia ospitato in un servizio Web (ovviamente) e (b) attivi la modalità AspNetCompatibility, come segue:

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

E quindi puoi ottenere l'indirizzo IP:

HttpContext.Current.Request.UserHostAddress
36
Gaz

Questo non ti aiuta in 3.0, ma posso solo vedere persone che trovano questa domanda e sono frustrate perché stanno cercando di ottenere l'indirizzo IP del client in 3.5. Quindi, ecco un po 'di codice che dovrebbe funzionare:

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

Puoi farlo se stai prendendo di mira .NET 3.0 SP1.

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

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

Riferimento: http://msdn.Microsoft.com/en-us/library/system.servicemodel.channels.remoteendpointmessageproperty.aspx

15
jangofetta