防止命名管道冲突

7 wcf named-pipes

我们有一个.NET程序,它使用WCF来侦听来自另一个进程的通信.我们使用命名管道.

ServiceHost host = new ServiceHost(
  typeof(Something),
  new Uri[]
    {
        new Uri("net.pipe://localhost")
    });
host.AddServiceEndpoint(typeof(ISomething), new NetNamedPipeBinding(), "Something");
host.Open();
Run Code Online (Sandbox Code Playgroud)

代码工作得很好,直到安装了第三方.NET程序.现在打开失败,显示"无法监听管道名称'net.pipe:// localhost /',因为另一个管道端点已经在侦听该名称."

我的假设是其他程序已经在使用命名管道.是否有解决方法或计算机上只有一个程序使用命名管道?我从其他问题中得到印象,你可以为管道设置一个"名称",这样它就不会与其他进程发生冲突,你是怎么做到的?

Ash*_*nKJ 15

您可以一次使用多个命名管道.从他的"编程WCF服务"一书中查看Juval Lowy的ServiceModelEx.您将看到他创建命名管道时,他使用的代码类似于:

Uri baseAddress = new Uri("net.pipe://localhost/" + Guid.NewGuid().ToString());
Run Code Online (Sandbox Code Playgroud)

哪个应该避免名称冲突.

  • 但是,如果在运行时生成服务器地址,客户端如何知道服务器地址? (6认同)