it-swarm.com.de

Abrufen der Client-IP-Adresse in WCF 3.0

Offensichtlich können Sie in WCF 3.5 problemlos eine Client-IP-Adresse beziehen, in WCF 3.0 jedoch nicht. Weiß jemand wie?

82
Gaz

Es stellt sich heraus, dass Sie dies können, solange (a) Ihr Dienst in einem Webdienst gehostet wird (offensichtlich) und (b) Sie den AspNetCompatibility-Modus wie folgt aktivieren:

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

Und dann können Sie die IP-Adresse erhalten durch:

HttpContext.Current.Request.UserHostAddress
36
Gaz

Dies hilft Ihnen in 3.0 nicht weiter, aber ich kann nur Leute sehen, die diese Frage finden und frustriert sind, weil sie versuchen, die Client-IP-Adresse in 3.5 abzurufen. Hier ist also ein Code, der funktionieren sollte:

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

Dies ist möglich, wenn Sie auf .NET 3.0 SP1 abzielen.

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

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

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

15
jangofetta