Najwyraźniej można łatwo uzyskać adres IP klienta w programie WCF 3,5, ale nie w programie WCF 3,0. Czy ktoś wie jak?
82
To nie pomaga w wersji 3.0, ale widzę, jak ludzie znajdują to pytanie i są sfrustrowani, ponieważ próbują uzyskać adres IP klienta w wersji 3.5. Oto kod, który powinien działać:
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;
Okazuje się, że możesz, o ile (a) Twoja usługa jest hostowana w usłudze sieci Web (oczywiście) i (b) włączysz tryb AspNetCompatibility w następujący sposób:
<system.serviceModel> <!-- this enables WCF services to access ASP.Net http context --> <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> ... </system.serviceModel>
Następnie możesz uzyskać adres IP poprzez:
HttpContext.Current.Request.UserHostAddress
źródło
HttpContext.Current.Request.UserHostAddress
Można to zrobić, jeśli jest przeznaczona dla platformy .NET 3.0 z dodatkiem SP1.
OperationContext context = OperationContext.Current; MessageProperties prop = context.IncomingMessageProperties; RemoteEndpointMessageProperty endpoint = prop[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty; string ip = endpoint.Address;
Kredyty: http://blogs.msdn.com/phenning/archive/2007/08/08/remoteendpointmessageproperty-in-wcf-net-3-5.aspx
Źródła: http://msdn.microsoft.com/en-us/library/system.servicemodel.channels.remoteendpointmessageproperty.aspx
źródło