繁体   English   中英

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

[英]Communication (Interprocess) between applications?

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

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

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

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

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

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

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

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

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

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

WCF将是另一个需要考虑的事情,但这确实是跨网络传输,所以你可能仍然希望WCF调用在服务器队列上放置一条消息。

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

远程处理

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

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

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

在.NET中选择通信选项可帮助您确定应用程序所需的对象间通信形式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM