Anscheinend können Sie leicht eine Client-IP-Adresse in WCF 3.5 erhalten, aber nicht in WCF 3.0. Weiß jemand wie?
Antworten:
Dies hilft Ihnen in 3.0 nicht weiter, aber ich kann nur sehen, dass Leute diese Frage finden und frustriert sind, weil sie versuchen, die Client-IP-Adresse in 3.5 zu erhalten. Also, hier ist 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;
Es stellt sich heraus, dass Sie dies können, solange (a) Ihr Dienst (offensichtlich) in einem Webdienst gehostet wird 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
HttpContext.Current.Request.UserHostAddress
Sie können, 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