【问题标题】:Prevent Named Pipes Conflict防止命名管道冲突
【发布时间】:2011-01-08 06:06:29
【问题描述】:

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

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

在安装第三方 .NET 程序之前,代码运行良好。现在打开失败并显示“无法侦听管道名称'net.pipe://localhost/',因为另一个管道端点已经在侦听该名称。”

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

【问题讨论】:

  • 可以使用来自SysInternals 的 Handle.exe 来找出当前正在使用您的命名管道的应用程序。命令“Handle.exe net.pipe:”。见Rodney Viana's post

标签: wcf named-pipes


【解决方案1】:

您可以一次使用多个命名管道。看看 Juval Lowy 在他的《Programming WCF Services》一书中的 ServiceModelEx。你会看到当他创建命名管道时,他使用的代码看起来像:

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

应该避免名称冲突。

【讨论】:

  • 但是如果是运行生成的,客户端怎么知道服务器地址呢?
  • 您可以将其作为参数传递给客户端或将其写入注册表或放入(可能是临时的)设置文件中。
猜你喜欢
  • 2011-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多