WCF 命名管道另一个端点错误但没有其他端点?

问题描述

我正在使用 DuplexChannelFactorynet.pipe://localhost/test 上创建命名管道。但是,当我运行程序时,出现错误:Cannot listen on pipe name "net.pipe://localhost/" because another pipe endpoint is already listening on that name.

所以我试图通过打开 powershell 并输入 [System.IO.Directory]::GetFiles("\\.\\pipe\\) 来查看是否真的如此,但没有提及 localhost。

然后我也尝试将地址 net.pipe://localhost/test 更改为 net.pipe://anything/test,但它仍然不起作用。

最后我重新启动了计算机并且它工作了。但是重启电脑不是最佳选择,今天早些时候我又重启了一次,它又坏了。

是否还有其他原因会导致我收到此错误?

解决方法

WCF 命名管道与常规命名管道在不同的系统上运行。当您在 localhost 上打开常规命名管道时,您将在 \.\pipe\localhost 处获得一个管道,但是当您打开 WCF 管道时,您将获得 \.\pipe\some-guid-xxxx-xxxx。这个生成的 GUID 对于同名的 WCF 命名管道是一致的,这就是它无缝工作的原因。 (见Prevent Named Pipes Conflict

现在,在我的代码中,我想在 localhost 上创建一个命名管道。它没有出现在 [System.IO.Directory]::GetFiles("\\.\\pipe\\) 中,因为 WCF 使用 UUID。

我最后使用的解决方法是将管道 url 指定为 net.pipe\localhost\something_specific_to_me 并有一个额外的 AddServiceEndpoint(...,"something_else"),以便最终管道可以通过 net.pipe\localhost\something_specific_to_me\something_else 连接。>

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...