建议在同一网络上的不同计算机上运行的进程之间进行通信的方法

时间:2010-03-10 03:50:58

标签: .net ipc pipe

我正在研究什么应该(希望)是.NET软件解决方案的一个小功能,它允许一个应用程序报告在同一网络上的多台计算机上运行的另一个应用程序的多个实例的状态。

我查看了this MSDN article on named pipes,并设置了一个运行良好的简单客户端/服务器项目。但是,这只是在相同的计算机上运行的两个进程(因此对于NamedPipeClientStream构造函数,我将“。”作为serverName参数传递)。尝试在同一网络上的单独的计算机上运行同一项目会导致客户端进程失败,并报告未找到网络路径。

这可能绝对只是我在客户端进程中传递错误的字符串serverName。 (我尝试了IP地址以及我相信是机器的网络名称,但也许我的格式错了。)无论如何,有些帮助使客户端/服务器IPC在不同的机器上运行在同一个网络上将非常感激。 (我也问这个问题,因为我甚至不知道使用命名管道是否是最合乎逻辑的解决方案。)

2 个答案:

答案 0 :(得分:4)

命名管道可以正常工作,但如果所有计算机都不在同一个域中,那么让它工作是很棘手的。

另一种选择当然只是使用套接字。使用套接字并不比使用命名管道复杂得多。

最后,如果所有应用程序都是.NET,那么WCF也是一个选项。这里的主要好处是您不必担心线上协议,它只是一系列方法调用。虽然WCF确实在安全性和配置方面增加了一些开销。

答案 1 :(得分:0)

MailSlots是另一种可能适合您的选择,它允许将消息广播到目标计算机或本地网络。

我有一个包含在C#库中的开源实现可能有所帮助。它使用MailSlot实现进行网络传播,但也会回退到WM_COPYDATA窗口消息或IOStream,以便将消息分发到单个计算机上的所有进程。这解决了只有一个进程可以读取MailSlot消息的限制。

http://thecodeking.github.com/XDMessaging.Net/