2011-09-19 18 views
5

Tôi đang chạy một dịch vụ windows mà tôi gửi tin nhắn qua NetNamedPipeBinding. Các tin nhắn được gửi từ một ứng dụng khách được kích hoạt bởi một GPO. Tôi vừa cài đặt dịch vụ và ứng dụng khách trên máy chủ mới và tôi nhận được thông báo sau:Nhận EndpointNotFoundException với NetNamedPipeBinding trong C#; Cần tạo một tên có tên toàn cầu

System.ServiceModel.EndpointNotFoundException: 
There was no endpoint listening at 
net.pipe://localhost/VOXAServices/VOXADefaultPipe that could accept the 
message. This is often caused by an incorrect address or SOAP action. 
See InnerException, if present, for more details. 

Không có ngoại lệ bên trong. Nếu tôi chạy ứng dụng máy khách bằng cách bấm đúp vào biểu tượng của nó trên màn hình nền, nó sẽ chạy mà không có vấn đề gì. Tôi quản lý mã cho cả dịch vụ cửa sổ và ứng dụng khách, vì vậy tôi có thể thay đổi bất cứ điều gì tôi cần. Nhưng cho đến nay, tôi khá thuyết phục rằng các ràng buộc, hợp đồng, và địa chỉ là tất cả chính xác (kể từ khi mọi thứ chạy tốt khi chạy từ máy tính để bàn). Tôi tin rằng vấn đề phải xảy ra với ứng dụng khách đang được chạy từ GPO. Nhưng tôi không thể nghĩ ra bất kỳ lý do nào tại sao điều đó lại gây ra lỗi này.

UPDATE:

Tôi đọc này trên trang web của Microsoft:

Một ống được đặt tên là một đối tượng trong hoạt động hạt nhân hệ thống Windows, chẳng hạn như một phần của bộ nhớ chia sẻ rằng quá trình có thể sử dụng cho giao tiếp . Một ống có tên có tên và có thể được sử dụng cho một chiều hoặc giao tiếp song công giữa các quy trình trên một máy.

Khi giao tiếp được yêu cầu giữa các ứng dụng WCF khác nhau trên máy tính duy nhất và bạn muốn ngăn chặn mọi liên lạc từ máy khác, sau đó sử dụng phương tiện vận tải có tên. Hạn chế bổ sung là các quá trình chạy từ Windows Remote Desktop có thể bị hạn chế trong cùng phiên Windows Remote Desktop trừ khi chúng có đặc quyền nâng cao.

(Choosing a Transport, nhấn mạnh thêm)

Tôi cần quá trình khách hàng để chạy trong bối cảnh (không có đặc quyền) sử dụng và có một UAC pop thoại lên không phải là một lựa chọn. Có anyway cho tôi để cung cấp cho khách hàng này quá trình nâng cao đặc quyền trong khi vẫn giữ quá trình chạy trong bối cảnh người dùng và không làm cho người dùng đặc quyền?

CẬP NHẬT # 2:

Dường như có một điều như toàn cầu và địa phương (với phiên cửa sổ) Named Pipes. Tôi tin rằng dịch vụ cửa sổ của tôi đang tạo ra một đường ống có tên địa phương và rằng nếu tôi có thể buộc nó tạo ra một đường ống tên toàn cầu, nó sẽ giải quyết được vấn đề của tôi. (Điều này giải thích lý do tại sao tôi không thể nhìn thấy đường ống của tôi trong sysinternals "Process Explorer", mặc dù ứng dụng khách hàng của tôi có thể tìm thấy nó nếu tôi khởi chạy nó từ một phiên đặc quyền). Vấn đề là, tôi không biết (và dường như không thể tìm ra) làm thế nào để buộc một đường ống được đặt tên được tạo ra trên toàn cầu (C#). Bất kỳ ý tưởng?

Trả lời

3

The mechanism by which WCF clients find WCF service NetNamedPipe endpoints liên quan đến một đối tượng bộ nhớ chia sẻ hạt nhân mà dịch vụ sử dụng để cho khách hàng biết tên thực tế của đường ống được sử dụng. Nếu các máy khách đang ở trong một phiên đăng nhập khác với máy chủ, đối tượng bộ nhớ chia sẻ này phải ở trong Global và không phải là không gian tên kernel cục bộ. Các ống được đặt tên tự có một không gian tên duy nhất, hiển thị cho tất cả các máy khách. Bạn không thể kiểm soát trực tiếp không gian tên WCF sử dụng cho đối tượng bộ nhớ chia sẻ, nhưng nó sẽ là không gian tên hạt nhân toàn cầu với điều kiện máy chủ của bạn là một Dịch vụ Windows đang chạy với SeCreateGlobalPrivilege.Câu hỏi của bạn dường như ngụ ý rằng đây là trường hợp, vì vậy tôi hoài nghi liệu vấn đề của bạn có được kết nối với các không gian tên đối tượng hạt nhân hay không.

Hai nguyên nhân có thể khác là:

  1. Các ACL mà bảo vệ cả hai đối tượng chia sẻ bộ nhớ và các đường ống được đặt tên. Những điều này sẽ luôn từ chối truy cập vào bất kỳ ngữ cảnh bảo mật nào có thành viên của nhóm NGƯỜI DÙNG MẠNG (SID S-1-5-2). Điều này thực thi bảo đảm WCF không có quyền truy cập từ xa đến các điểm cuối đường ống được đặt tên.

  2. Nếu bạn đang chạy trên Vista hoặc cao hơn, mức độ toàn vẹn bắt buộc của quy trình máy khách không được thấp hơn mức toàn vẹn bắt buộc của đối tượng hạt nhân (mức này sẽ là mức ngụ ý - Trung bình - trừ khi bạn đã thực hiện đặc biệt bước để nâng cao sử dụng bắt buộc Liêm Labels)

tôi không biết đủ về bối cảnh an ninh, trong đó quá trình khách hàng của bạn bắt đầu bởi GPO sẽ chạy để tư vấn thêm, nhưng tôi đề nghị bạn kiểm tra hai khả năng này và bài cập nhật thêm cho câu hỏi của bạn cho phù hợp.

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