我正在研究使用命名管道来控制在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的命名管道还没有完全实现?
答案 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机器上进行故障排除。