2010-08-28 37 views
21

Hey, làm thế nào để bạn có được địa chỉ IP của người đó thực hiện một yêu cầu trong một cái gì đó như sau:WCF 4 Nghỉ ngơi Yêu cầu IP?

[ServiceContract]  
    [AspNetCompatibilityRequirements(RequirementsMode = 
    AspNetCompatibilityRequirementsMode.Required)]  
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]   
    public partial class UsersService 
    {       
     [WebInvoke(UriTemplate = "", Method = "PUT")]   
     public User AddNewUser(User newUser) 
     {    
      // code goes here including GETTING AN IP?? 
     } 

Cảm ơn!

Trả lời

38

Bên AddNewUser sử dụng sau đoạn:

OperationContext context = OperationContext.Current; 
MessageProperties messageProperties = context.IncomingMessageProperties; 
RemoteEndpointMessageProperty endpointProperty = 
    messageProperties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty; 

RemoteEndpointMessageProperty dụ cung cấp Địa chỉ và tài sản Cảng.

+1

Vấn đề là trừ khi một cái gì đó đã thay đổi trong .Net 4, nó là một nỗi đau thực sự để có được tổ chức của OperationContext khi sử dụng WebHttpBinding. Tôi đã có thể làm bằng cách tạo ra một MessageInspector, nhưng nó đòi hỏi phải bỏ một chút nhảy hoop. –

+0

Tôi không chắc bạn có ý gì về điều đó. OperationContext phải có sẵn trong bất kỳ cuộc gọi WCF nào ngay cả khi nó là dịch vụ REST được hiển thị trên WebHttpBinding. Tôi đã thử nghiệm nó trong WCF 4 và nó hoạt động. –

+0

Trong Net 3.5 với WebHttpBinding bạn có thể truy cập WebOperationContext, nhưng OperationContext không có sẵn trực tiếp. Tôi rất vui khi biết rằng họ đã khắc phục điều đó trong 4.0. –

Các vấn đề liên quan