当两个进程试图同时在不同的管道上进行通信时,使用NamedPipes的WCF IPC会发生异常

本文关键字:使用 NamedPipes 通信 WCF IPC 异常 进程 两个 管道 | 更新日期: 2023-09-27 18:22:19

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

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

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

从本质上讲,流程是这样的:进程1在管道2上调用进程2方法的同时,进程2在管道1上调用进程1方法。当这种情况发生时,我在ICommunicationObject.Close()调用中不断得到TimeoutExceptions。

我尝试过NamedPipes和NetTcp,但两者都有相同的问题。另一方面,BasicHttp不。。。工作正常,但我不应该在同一台机器上为IPC使用BasicHttp。

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

任何输入都会受到高度赞赏

当两个进程试图同时在不同的管道上进行通信时,使用NamedPipes的WCF IPC会发生异常

这是典型的死锁情况。双方都在对方的UIThread上发布工作,并且都在等待被阻止的另一方回复。我将调用方切换为在后台线程上使用Tasks和Dispatch远程调用,一切都很好。