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?