WCF 命名管道另一个端点错误但没有其他端点?
WCF Named Pipe Another Endpoint Error but no other endpoints?
我正在使用 DuplexChannelFactory
在 net.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 命名管道在与常规命名管道不同的系统上运行。当您在本地主机上打开一个常规命名管道时,您将在 \.\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
.
我正在使用 DuplexChannelFactory
在 net.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 命名管道在与常规命名管道不同的系统上运行。当您在本地主机上打开一个常规命名管道时,您将在 \.\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
.