Chúng tôi có một chương trình .NET sử dụng WCF để nghe thông tin liên lạc từ một tiến trình khác. Chúng tôi đã sử dụng các đường ống có tên.Ngăn chặn xung đột có tên là
ServiceHost host = new ServiceHost(
typeof(Something),
new Uri[]
{
new Uri("net.pipe://localhost")
});
host.AddServiceEndpoint(typeof(ISomething), new NetNamedPipeBinding(), "Something");
host.Open();
Mã hoạt động tuyệt vời cho đến khi chương trình .NET của bên thứ ba được cài đặt. Bây giờ mở không thành công với một thông báo "Không thể nghe trên tên đường ống" net.pipe: // localhost/'bởi vì một điểm cuối đường ống khác đã lắng nghe trên tên đó. "
Giả định của tôi là chương trình khác đã sử dụng các đường ống có tên. Có cách nào khác hoặc chỉ có thể sử dụng một chương trình trên máy tính có tên là đường ống? Tôi nhận được ấn tượng từ các câu hỏi khác mà bạn có thể đặt một "tên" cho một đường ống để nó không xung đột với các quy trình khác, làm thế nào để bạn làm điều đó?
Có thể sử dụng Handle.exe từ [SysInternals] (http://technet.microsoft.com/en-us/sysinternals/default.aspx) để tìm hiểu xem ứng dụng nào đang sử dụng hiện đang sử dụng đường ống có tên của bạn. Lệnh "Handle.exe net.pipe:". Xem [bài đăng của Rodney Viana] (http://blogs.msdn.com/b/rodneyviana/archive/2011/03/22/named-pipes-in-wcf-are-named-but-not-by-you-and -how-to-find-the-thực-windows-object-name.aspx) – mcdon