Очевидно, вы можете легко получить IP-адрес клиента в WCF 3.5, но не в WCF 3.0. Кто-нибудь знает как?
Ответы:
Это не поможет вам в версии 3.0, но я просто вижу, как люди находят этот вопрос и разочаровываются, потому что они пытаются получить IP-адрес клиента в версии 3.5. Итак, вот код, который должен работать:
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;
Оказывается, вы можете, если (а) ваша служба размещается в веб-службе (очевидно) и (б) вы включаете режим AspNetCompatibility, как показано ниже:
<system.serviceModel>
<!-- this enables WCF services to access ASP.Net http context -->
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
...
</system.serviceModel>
И тогда вы можете получить IP-адрес:
HttpContext.Current.Request.UserHostAddress
HttpContext.Current.Request.UserHostAddress
Можно, если вы ориентируетесь на .NET 3.0 SP1.
OperationContext context = OperationContext.Current;
MessageProperties prop = context.IncomingMessageProperties;
RemoteEndpointMessageProperty endpoint = prop[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
string ip = endpoint.Address;
Кредиты: http://blogs.msdn.com/phenning/archive/2007/08/08/remoteendpointmessageproperty-in-wcf-net-3-5.aspx