Очевидно, ви можете легко отримати 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