Получение IP-адреса клиента в WCF 3.0


по-видимому, вы можете легко получить IP-адрес клиента в WCF 3.5, но не в WCF 3.0. Кто-нибудь знает как?

3 80
wcf

3 ответа:

Это не поможет вам в 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

вы можете, если вы нацелены на .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

ссылка: http://msdn.microsoft.com/en-us/library/system.servicemodel.channels.remoteendpointmessageproperty.aspx