2010-01-22 30 views
5

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 đó?

+0

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

Trả lời

14

Bạn có thể sử dụng nhiều ống được đặt tên cùng một lúc. Hãy nhìn vào ServiceModelEx của Juval Lowy từ cuốn sách Lập trình WCF dịch vụ của mình. Bạn sẽ thấy khi anh ta tạo các đường ống có tên, anh ấy sử dụng mã trông giống như:

Uri baseAddress = new Uri("net.pipe://localhost/" + Guid.NewGuid().ToString());

Nên tránh xung đột tên.

+0

Hoàn hảo. Cảm ơn rất nhiều –

+6

Nhưng làm thế nào để khách hàng biết địa chỉ máy chủ nếu nó được tạo ra khi chạy? – IneedHelp

+0

Bạn có thể chuyển nó dưới dạng tham số cho ứng dụng khách hoặc ghi nó vào sổ đăng ký hoặc đặt nó trong tệp cài đặt (có thể là tạm thời). – beppe9000

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