创建命名管道有时会随机失败

时间:2018-07-27 12:32:19

标签: c# .net ipc named-pipes

当前的问题是要使“容器”应用程序和“子”应用程序通过命名管道进行通信。问题是,有时无法创建管道。

事情进展顺利时,沟通就很好。

我看到的问题是有时Pipe服务器将无法初始化。我可以看到为什么在某些情况下会发生这种情况,即我的应用程序的先前版本仍在后台运行,并且由于某种原因未正确退出,因此它一直挂在管道上。但是我也看到了失败,因为我为管道输入了新的随机名称,该名称不应被其他任何进程使用,这是让我担心的部分。也许这是操作系统在同一进程名称上设置的限制,还是在Visual Studio调试模式下设置的限制?

为了说明这一点,我有一些代码尝试创建服务器流(管道服务器):

                     NamedPipeServerStream server = new NamedPipeServerStream(pipeName, PipeDirection.InOut, 1);

我经常看到的异常是:

  

无法创建server:System.IO.IOException:所有管道实例均处于繁忙状态。

我尝试了一些变体,将安全选项传递给管道+将允许的服务器数量从1增加到更高,但是“孩子” /客户端可能会连接到我认为是另一个进程的进程正确关闭,因此管道服务器错误。

我的想法是:

  • 想办法“强行”接管。
  • 想出一种方法以某种方式关闭我自己应用程序的所有无效实例?
  • 协商一个新管道,以使用将一些随机管道名称写入两个应用程序都可以先读取的文件?如果名称不一样,即使我无法创建管道,但行为异常,这似乎是过大的选择,仍然不理想。

由于很难重新创建,因此我通过执行以下操作来模拟问题:

var pipeName =“ myApp22”;

                 NamedPipeServerStream server = new NamedPipeServerStream(pipeName, PipeDirection.InOut, 1);

//在这里,我想捕获异常,然后强制关闭,然后重复此操作:

                 NamedPipeServerStream server = new NamedPipeServerStream(pipeName, PipeDirection.InOut, 1);

任何输入将不胜感激。谢谢。

0 个答案:

没有答案
相关问题