2009-01-19 26 views
8

Tôi đang xác thực người dùng bằng cách sử dụng UserNamePasswordValidator.Validate (tên người dùng chuỗi, mật khẩu chuỗi) và dịch vụ đang lưu trữ chính nó (ví dụ: không có IIS).Đọc địa chỉ IP của người gọi trong WCF (OperationContext là null)?

Vấn đề tôi gặp phải là nếu người dùng không xác thực tôi muốn theo dõi địa chỉ IP của người dùng. Điều này làm việc tốt của người sử dụng được xác nhận, bởi vì sau đó các OperationContext đã được khởi tạo (nó là null bên trong phương thức xác nhận hợp lệ và không được tạo ra cho đến sau này).

Có ai biết cách nhận địa chỉ IP của khách hàng trong phương thức xác thực hoặc trước khi phương thức xác thực đã được thực thi không?

Vâng, tôi biết về cách để có được địa chỉ IP sử dụng RemoteEndpointMessageProperty nhưng cũng giống như tôi đã nói, nó không bao giờ nhận được rằng xa nếu xác nhận thất bại :-)

+1

Tôi đang gặp vấn đề tương tự và nghiên cứu của tôi đã phát triển. Tôi nghĩ rằng nó có thể là không thể. :( – Randolpho

Trả lời

1

Tôi đã nghiên cứu này đến chết cả tuần, và tôi có thể 't đi lên với một mục blog hoặc bài viết MSDN mà đề với vấn đề này.

Theo như tôi có thể biết, bạn không thể đăng nhập địa chỉ IP trong giai đoạn Xác thực.

Cách giải quyết duy nhất tôi có thể đề xuất là lưu trữ trong IIS và sử dụng nhật ký web ở đó, thực hiện đăng nhập địa chỉ IP. Thật không may, thật không may, nhưng nó có thể là cách duy nhất.

0

Nếu bạn đang lưu trữ trong IIS thì điều này trở nên đơn giản hơn nhiều. Đoạn cấu hình này xuất phát trực tiếp từ dự án web lưu trữ của tôi và buộc các yêu cầu ASP.NET đi xuống đường ống IIS thay vì được gửi thẳng tới các bit ASP err của IIS.

aspNetCompatibilityEnabled: Khi thuộc tính này được thiết lập để đúng, yêu cầu đối với các dịch vụ Windows Communication Foundation (WCF) dòng chảy qua các đường ống dẫn HTTP ASP.NET, và thông tin liên lạc trên phi HTTP giao thức đều bị cấm.

Xem: http://msdn.microsoft.com/en-us/library/ms731336.aspx

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 

tôi sử dụng AuthenticationService và tận dụng các HttpContext để có được tất cả những thứ thú vị về các khách hàng, phần lớn là rất hữu ích cho những thứ như đảm bảo người dùng không được đăng nhập từ sáu mạng con khác nhau cũng như chơi xung quanh với cookie.

Mặc dù tôi nghĩ rằng đây được áp dụng cho MS AuthenticationService, bất kỳ dịch vụ khác mà bạn có sẽ cần attrib này:

[AspNetCompatibilityRequirements (RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

Nếu bạn muốn theo đuổi phi bạn -IIS lưu trữ tuyến đường dịch vụ, sau đó tôi muốn xem những gì các công cụ có sẵn bên trong MS API bằng cách sử dụng phản ánh, poking xung quanh trên một WCF với trình gỡ lỗi trong khi dừng lại, mở ra tất cả những thành viên ngoài công lập.

Tôi cho rằng sự cố sẽ nhận được tham chiếu đến một chút WCF được khởi tạo từ đó để bắt đầu chọc. Bạn có thể phải đăng ký một số loại người nghe đến một trong những người điều phối khi bạn thiết lập máy chủ dịch vụ.

http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.channeldispatcher.aspx

Edit:

Thêm liên kết này như suy nghĩ của tôi có thể là bạn sẽ cần phải có được những thứ trong WCF đó là phải xuống ngăn xếp trước khi nó được cho mã của bạn:

http://blogs.msdn.com/sonuarora/archive/2007/06/11/passing-soap-actions-to-adapter-inbound-handler-for-filtering-type-of-listeners.aspx

+0

Tôi đã thử tùy chọn này với dịch vụ web SOAP cơ bản của tôi dựa trên cơ sởHttpBinding và vẫn đang tìm kiếm OperationContext.Current để trống trong phương thức UserNamePasswordValidator.Validate() – BrettRobi

+0

"Tôi sử dụng AuthenticationService và tận dụng HttpContext để có được tất cả những điều thú vị về khách hàng "- nghĩa là khi bạn đã thiết lập khả năng tương thích ASP.NET, bạn sử dụng HttpContext.Current giống như bạn làm trong một trang web. Hãy nhớ câu hỏi là" làm cách nào để đọc địa chỉ IP của người gọi " –

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