2010-07-19 27 views
5

Trên Windows 7 và .NET 4 Tôi nhận được một số hiệu ứng rất lạ từ WCF có tên là vận chuyển đường ống khi khách hàng WCF của tôi là một dịch vụ Windows.Tại sao dịch vụ WCF có tên từ chối máy khách Windows?

Dịch vụ WCF của tôi được lưu trữ trong ứng dụng chế độ người dùng và được hiển thị trên liên kết đường ống có tên.

Máy khách WCF của tôi là dịch vụ Windows, hoạt động dưới dạng Dịch vụ mạng (Tôi nhận được kết quả tương tự nếu nó chạy dưới dạng Hệ thống cục bộ).

Nếu ứng dụng chế độ người dùng của tôi (nghĩa là dịch vụ WCF) đang hoạt động với tư cách quản trị viên miền thì hoạt động tốt, nhưng nếu ứng dụng chế độ người dùng là người dùng thông thường (hoặc quản trị cục bộ) thì kết nối bị từ chối với CommunicationObjectFaultedException.

Tôi thấy một số câu hỏi ở đây liên quan đến UAC có liên quan, nhưng tôi chưa thấy giải pháp thực tế ở bất cứ nơi nào chỉ làm cho phương tiện vận chuyển đường ống được đặt đúng cách. Đây có phải chỉ là lỗi khuôn khổ không thể tránh khỏi?

+0

Ngoại lệ bên trong là gì? Và, không, nó không phải là một lỗi trong khuôn khổ. – Will

Trả lời

4

Từ blog entry Christian Weyer của Dealing with OS privilege 'issues' in WCF Named Pipes scenarios:

Nếu quá trình máy chủ WCF của tôi sử dụng một tên ống dựa trên thiết bị đầu cuối không có đặc quyền để tạo ra một đối tượng hạt nhân toàn cầu nó âm thầm thất bại và tạo ra một địa phương mà sẽ không hiển thị với các quy trình bên ngoài phiên của nó.

Vì vậy, không có cơ chế giao tiếp dựa trên đường ống được đặt tên (WCF hoặc khác) được mở bởi một quy trình mà không có đặc quyền tạo đối tượng hạt nhân toàn cầu sẽ nhận được tin nhắn từ bên ngoài phiên của riêng nó. Có vẻ như đây là một ví dụ về luật của những hậu quả không mong muốn, nơi mà việc kiểm soát an ninh thực sự khiến người ta mở nhiều lỗ hổng bảo mật hơn bằng cách buộc phải sử dụng các mạng có thể nhìn thấy thay vì một cơ chế IPC của máy cục bộ. MS nên thực sự cung cấp một kênh IPC thích hợp cho WCF bởi vì vận chuyển đường ống hiện tại có tên không cắt nó.

Vấn đề là đây không phải là trường hợp đặc biệt bất thường, đối với dịch vụ .NET muốn nói chuyện với ứng dụng khay .NET để cung cấp thông báo của người dùng. Cơ chế bỏ phiếu từ ứng dụng khay đến servide sẽ hoạt động ... nhưng bỏ phiếu chậm và tốn nhiều tài nguyên và tôi muốn tránh nó.

Bất kỳ ai biết vận chuyển IPC tùy chỉnh tốt hơn?

Tim

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