在同一网络上运行的不同计算机进程之间通信的推荐方式是什么?

3
我正在为一个.NET软件解决方案开发一个小功能,它将允许一个应用程序报告同一网络上运行的多个另一个应用程序实例的状态。我查看了这篇MSDN文章关于命名管道,并设置了一个简单的客户端/服务器项目,运行良好。但是,这只是在同一台计算机上运行的两个进程(因此对于NamedPipeClientStream构造函数,我将"."作为serverName参数传递)。尝试在同一网络上的不同计算机上运行相同的项目会导致客户端进程失败,并报告找不到网络路径的错误。

这可能仅仅是因为我在客户端进程中传递了错误的 serverName 字符串。 (我尝试过 IP 地址以及我认为是机器网络名称的东西,但也许格式不对。)无论如何,在同一网络上的不同机器上实现客户端/服务器 IPC 的帮助将不胜感激。(我提出这个问题也是因为我甚至不知道使用命名管道是否是首选解决方案。)

2个回答

4
命名管道可以使用,但如果所有计算机不在同一域上,则很难使其正常工作。
当然,另一个选择就是使用套接字。使用套接字并不比使用命名管道更复杂。
最后,如果所有应用程序都是.NET,则WCF也是一个选项。这里的主要优点是您不必担心传输协议,它只是一系列方法调用。尽管WCF在安全性和配置方面增加了一些开销。

@codeka:哇,你提到管道在跨域上很棘手的说法让我大开眼界;我确实试图从两个不同的域使用它们。我在同一域中的两台计算机上再次尝试了一下,结果完美无缺。更重要的是,你建议我研究WCF(所有应用程序确实都在.NET中)非常有帮助。我现在正在研究这个。 - Dan Tao
WCF不支持命名管道进行机器间通信。 - Preet Sangha

0

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接