当 2 个进程尝试同时在不同管道上相互通信时,使用命名管道的 WCF IPC 会崩溃

Posted

技术标签:

【中文标题】当 2 个进程尝试同时在不同管道上相互通信时,使用命名管道的 WCF IPC 会崩溃【英文标题】:WCF IPC using NamedPipes freaks out when 2 processes attempt to talk to each other on different pipes at the same time 【发布时间】:2014-09-17 08:15:11 【问题描述】:

我正在使用 WCF 和 NamedPipes 进行进程间通信。

每个进程侦听一个唯一的命名管道,其他进程很容易发现。

我遇到的问题与 2 个进程几乎同时试图相互交谈有关。我假设在不同的管道上,但谁知道 WCF 发生了什么......

基本上流程是这样的:进程 1 在管道 2 上调用进程 2 的方法,几乎​​同时进程 2 在管道 1 上调用进程 1 的方法。发生这种情况时,我在 ICommunicationObject.Close() 调用中不断收到 TimeoutExceptions。

我已经尝试过 NamedPipes 和 NetTcp 并且都遇到了同样的问题。另一方面,BasicHttp 不...工作正常,但我不应该在同一台机器上使用 BasicHttp 进行 IPC。

另一个重要信息。如果我使用 Dispatcher.BeginInvoke() 将我的回复电话排入队列,那么它可以工作。 看起来排队下一个调用让 WCF 有时间在开始下一个回调之前完成第一个调用。但是,当进程在不同的管道上进行通信时,为什么这甚至很重要呢??

非常感谢任何意见

【问题讨论】:

【参考方案1】:

这是典型的僵局情况。双方都在对方的 UIThread 上发布工作,并且都在等待对方的回复。 我将调用者切换为使用 Tasks 并在后台线程上调度远程调用,一切都很好。

【讨论】:

以上是关于当 2 个进程尝试同时在不同管道上相互通信时,使用命名管道的 WCF IPC 会崩溃的主要内容,如果未能解决你的问题,请参考以下文章

两个 JVM 进程可以使用 ZeroMQ 在同一台机器上进行通信吗?

当进程可以来来去去时,如何在 C# 中进行进程间通信?

进程间通信

父进程无法读取来自 C 中 4 个不同管道的所有消息

实验八 进程间通信

实验八 进程间通信