Rõ ràng bạn có thể dễ dàng lấy được địa chỉ IP máy khách trong WCF 3.5 nhưng không phải trong WCF 3.0. Có ai biết làm thế nào không?
Câu trả lời:
Điều này không giúp bạn trong 3.0, nhưng tôi có thể thấy mọi người tìm thấy câu hỏi này và thất vọng vì họ đang cố lấy địa chỉ IP của máy khách trong 3.5. Vì vậy, đây là một số mã sẽ hoạt động:
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;
Hóa ra là bạn có thể, miễn là (a) dịch vụ của bạn đang được lưu trữ trong một Dịch vụ Web (hiển nhiên) và (b) bạn bật chế độ Tương thích AspNetC, như sau:
<system.serviceModel>
<!-- this enables WCF services to access ASP.Net http context -->
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
...
</system.serviceModel>
Và sau đó bạn có thể lấy địa chỉ IP bằng cách:
HttpContext.Current.Request.UserHostAddress
HttpContext.Current.Request.UserHostAddress
Bạn có thể nếu bạn đang nhắm mục tiêu .NET 3.0 SP1.
OperationContext context = OperationContext.Current;
MessageProperties prop = context.IncomingMessageProperties;
RemoteEndpointMessageProperty endpoint = prop[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
string ip = endpoint.Address;
Tín dụng: http://blogs.msdn.com/phenning/archive/2007/08/08/remoteendpointmessageproperty-in-wcf-net-3-5.aspx