应用程序之间的通信(进程间)?

时间:2009-05-07 07:54:17

标签: c# client-server interprocess

我即将编写一个负责与外部硬件通信的“服务器”应用程序。申请应处理客户的请求。客户端向服务器发送消息,如果服务器忙于处理硬件,则新消息应存储在稍后将处理的队列中。

客户端还应能够取消请求(如果它在服务器的队列中)。当服务器应用程序完成硬件时,它应该能够将结果发送回请求该作业的客户端。

服务器和客户端应用程序可能在同一台PC上,也可能不在同一台PC上。 所有开发都在.NET(C#)2005中完成。

所以,我的问题是:解决这种沟通问题的最佳方法是什么?

MSMQ?肥皂? WCF?远程处理?其他?

5 个答案:

答案 0 :(得分:2)

假设您可以使用.NET 3.0或更高版本,那么您可能希望将WCF作为通信通道 - 接口是一致的但它允许您使用适当的传输机制,具体取决于客户端和服务器相对于每个的位置其他 - 所以您可以根据需要选择使用SOAP或MSMQ或二进制格式或其他格式(如果需要可以自己滚动)。它还涵盖了双向沟通的必要性。

在服务器上排队消息应该被视为一个单独的问题 - 特别是考虑到需要删除排队的消息。

答案 1 :(得分:1)

如果客户端和服务器进程在同一台机器上,我认为命名管道将为您提供最快的原始字节传输速率。 如果进程跨越不同的计算机,则需要使用基于套接字的方法。

据报道,Remoting非常缓慢。基于您计划在其上部署解决方案的目标操作系统,您可以选择WCF et.all等选项。但是,您可能希望在决定时查看这些协议的开销。

答案 2 :(得分:0)

虽然存在安全性和部署注意事项,但MSMQ会有所帮助。您可以查看服务总线(例如NServiceBus或MassTransit),还有可以提供帮助的SQL Server Service Broker(也可以由服务总线用作传输)。

WCF是另一回事,但这确实是跨网络传输,因此您可能仍希望WCF调用将消息放入服务器队列。

我不建议远程处理,因为很难保持关注点的分离,而在你知道它之前,你正在开发一个非常繁琐的界面而没有意识到它。相对而言,远程调用是昂贵的,因此您应该尝试使消息保持相当粗糙。 WCF将是我的推荐。尤其是因为您可以将其设置为使用HTTP传输并避免大量部署和安全问题。

答案 3 :(得分:0)

远程处理

如果所有开发都是在.NET 2005中完成的,那么Remoting是最好的方法。 http://en.wikipedia.org/wiki/.NET_Remoting

答案 4 :(得分:0)

.NET Framework提供了几种与不同应用程序域中的对象进行通信的方法,每种方法都考虑到了特定级别的专业知识和灵活性。例如,互联网的发展使XML Web服务成为一种极具吸引力的通信方法,因为XML Web服务建立在HTTP协议的公共基础结构和使用XML的SOAP格式之上。这些是公共标准,可立即用于当前的Web基础结构,而无需担心其他代理或防火墙问题。

并非所有应用程序都应使用某种形式的XML Web服务构建,但这仅仅是因为与通过HTTP连接使用SOAP序列化相关的性能问题。

Choosing Communication Options in .NET可帮助您确定您的应用程序需要哪种形式的对象间通信。