我即将编写一个负责与外部硬件通信的“服务器”应用程序。申请应处理客户的请求。客户端向服务器发送消息,如果服务器忙于处理硬件,则新消息应存储在稍后将处理的队列中。
客户端还应能够取消请求(如果它在服务器的队列中)。当服务器应用程序完成硬件时,它应该能够将结果发送回请求该作业的客户端。
服务器和客户端应用程序可能在同一台PC上,也可能不在同一台PC上。 所有开发都在.NET(C#)2005中完成。
所以,我的问题是:解决这种沟通问题的最佳方法是什么?
MSMQ?肥皂? WCF?远程处理?其他?
答案 0 :(得分:2)
假设您可以使用.NET 3.0或更高版本,那么您可能希望将WCF作为通信通道 - 接口是一致的但它允许您使用适当的传输机制,具体取决于客户端和服务器相对于每个的位置其他 - 所以您可以根据需要选择使用SOAP或MSMQ或二进制格式或其他格式(如果需要可以自己滚动)。它还涵盖了双向沟通的必要性。
在服务器上排队消息应该被视为一个单独的问题 - 特别是考虑到需要删除排队的消息。
答案 1 :(得分:1)
如果客户端和服务器进程在同一台机器上,我认为命名管道将为您提供最快的原始字节传输速率。 如果进程跨越不同的计算机,则需要使用基于套接字的方法。
据报道,Remoting非常缓慢。基于您计划在其上部署解决方案的目标操作系统,您可以选择WCF et.all等选项。但是,您可能希望在决定时查看这些协议的开销。答案 2 :(得分:0)
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可帮助您确定您的应用程序需要哪种形式的对象间通信。