Linux上的.NET Core命名管道问题(已在使用的地址)

时间:2017-10-11 08:46:18

标签: c# .net .net-core

我正在研究使用命名管道来控制在linux下运行的.net核心应用程序的某些方面(例如:触发保存,关闭等)。

我正在尝试在应用程序中创建disp,但它总是失败并显示以下消息:false(我尝试了不同的名称,没有任何帮助)。

我还尝试使用NamedPipeServerStream创建临时管道,但是这也会失败并显示以下消息:Address already in use

从查看命名管道的.NET Core测试,这不应该是一个问题,因为他们也使用/tmp/somepipename来生成临时管道

以下是用法:NamedPipeTestBase.cs

以下是The name of a pipe on this platform must only include characters valid in file names.的实施:PipeTestBase.cs

以防万一,这是我正在使用的代码(一个班轮,非常简单):

Path.GetTemporaryFileName()

我做错了什么,或者Linux的命名管道还没有完全实现?

1 个答案:

答案 0 :(得分:3)

关于错误:

  

未处理的异常:System.PlatformNotSupportedException:名称   此平台上的管道必须仅包含文件中有效的字符   名。

This is the expected behavior。您的输入(/tmp/somepipename)是完全限定的路径,而不是文件名。有效文件名的示例为:some.pipe

在某些平台上使用命名管道时,正斜杠有效。这就是为什么你可以看到CoreFX test class在预先设置斜杠之前检查IsInAppContainer的原因。 IsInAppContainer代码显示,如果它不是Windows,则会始终返回false而不添加斜杠。

我已经通过MacOS 10.12.6和CentOS 7.2上的命名管道测试了客户端服务器连接,并且它按预期工作。你实际上可以看到一些Unix specific implementation of PipeStream on GitHub

我相信提出的错误:

  

地址已在使用

来自您的程序,试图绑定到已使用的IP /端口组合。可能是这样吗? 如果没有,请提供您的解决方案,以便我可以在Linux机器上进行故障排除。