繁体   English   中英

.NET中程序之间的通信

[英]Communication between programs in .NET

我想将程序的各个模块相互通信。 它们可能在同一台计算机上,但可能在不同的计算机上。

我正在考虑2种方法:

  1. 创建一个包含所有详细信息的类。 将其发送到通信层。 这一个序列化它,发送它,另一面反序列化它回到类,然后进一步处理它。
  2. 创建一个哈希表(键/值的东西)。 将所有数据放入其中。 发送到通讯层等

因此,归结为hashtable vs class。

如果我认为“松散耦合”,我更喜欢哈希表。 更新一个模块很容易,在hastable中包括新的额外参数,而无需更新另一侧。

然后再用一个类进行编译时类型检查,而不是运行时检查。

有人以前解决过这个问题吗,对此有建议吗?

谢谢!

编辑:我给与我的原始问题最相关的答案分,尽管它不是最受好评的一个

听起来您只是想将一些IPC(进程间通信)合并到系统中。

在.NET(3.0及更高版本)中实现此目标的最佳方法是Windows Communication Foundation(WCF) ,这是Microsoft开发的通用框架,用于在通用基础上以各种不同方式(传输)在程序之间进行通信。

尽管我怀疑您可能会出于效率和鲁棒性的目的而使用命名管道 ,但是还有许多其他可用的传输方式,例如TCP和HTTP(请参阅此MSDN文章 ),更不用说从二进制到二进制的各种序列化格式了。 XML到JSON。

人们往往会在分布式系统设计中遇到这种问题。 它出现在Web Service(定义参数和返回类型的WSDL)消息系统中,消息的格式可能是XML或其他定义良好的格式。 在所有情况下,控制客户端和服务器耦合的问题仍然存在。

您的哈希表会怎样? 假设您的请求包含“ NAME”和“ PHONE-NUMBER”,您突然意识到您需要区分“ LANDLINE-NUMBER”和“ CELL-NUMBER”。 如果仅将哈希表条目更改为使用新值,则服务器需要同时更改。 假设此时您不仅有一个客户端和一台服务器,而且可能正在处理某种交换或代理系统,许多客户端由许多团队实现,许多服务器由许多团队实现。 让他们所有人同时升级到新的消息格式是一项艰巨的任务。

因此,我们倾向于寻求诸如可加性更改之类的后向兼容解决方案,我们保留“ PHONE-NUMBER”并添加新字段。 服务器现在可以容忍包含旧格式或新格式的消息。

不同的分配技术具有不同的内置容忍度以实现向后兼容。 在处理序列化类时,您可以处理旧版本还是新版本? 在处理WSDL时,消息解析器将容忍附加更改。

我将遵循以下过程:

1)。 您是否可以在客户端和服务器之间建立简单的关系,例如,您是否同时对代码和控件进行控制,可以自由规定它们的发布周期。 如果为“否”,则倾向于灵活性,请使用哈希表或XML。

2)。 即使您处于控制之下,也要看看您的序列化框架支持版本控制的难易程度。 强类型,序列化的类接口可能会更易于使用,从而使您清楚地了解更改接口将要采取的措施。

内置的Remoting支持发生了什么?

http://msdn.microsoft.com/en-us/library/aa185916.aspx

如果需要,它可以在TCP / IP或IPC上工作。 它比WCF更快,并且对您的代码非常透明。

您可以使用Sockets,Remoting或WCF,eash具有优缺点。

但是,如果性能不是很关键,则可以使用WCF以及对类进行序列化和反序列化,为了获得最佳性能,我建议使用套接字

在过去几年中广泛使用WCF和各种绑定的经验中,我们发现WCF不值得麻烦。

正确使用WCF包括复杂操作,包括正确处理通道错误同时保持良好的性能(我们在早期使用wcf放弃了高性能)是很复杂的。

对于经过身份验证的客户端方案,我们切换到了http rest(不带wcf)并执行json / protobuf负载。

对于高速的未经身份验证的场景(或至少是未经Keberos身份验证的场景),我们现在使用zeromq和protobuf。

暂无
暂无

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

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