从一个程序到另一个程序获取变量

时间:2012-06-17 16:44:09

标签: c#

我甚至不确定如何提出这个问题,但我会试一试。

我在c#中有一个程序,它从生产线上的传感器读取值,表示生产线健康状况。这些值每500毫秒更新一次。我有四条线,这是为了完成。我想写一个“概述”程序,它将能够通过网络访问这些值,以便对工厂的工作情况做一个很好的总结。我的问题是如何从线上的c#程序中获取值到c#overview程序实时?

如果我的问题没有多大意义,请告诉我,我会尝试改写它。

谢谢!

4 个答案:

答案 0 :(得分:3)

您有几种选择:

  • MSMQ

在MSMQ(Microsoft Message Queuing)中写入消息。这是一个(可选)持久且快速的存储,用于在机器之间传输消息。 由于您说您需要近实时的其他应用程序中的消息,因此使用MSMQ是有意义的,因为您不希望在该应用程序中编写逻辑来处理大量传入消息。 保持MSMQ位于中间并取出您需要的东西,最重要的是尽可能的。

  • WCF

另一个应用可能会公开一个WCF服务,每次有可用数据时,您的实时应用都可以调用该服务。端点可能超过net.tcp,这意味着开销很低,特别是如果您发送小消息。

其他选项包括之前的说法:数据库,文件等。因此,您可以在各种选项之间做出选择。

答案 1 :(得分:2)

您可以使用命名管道(请参阅http://msdn.microsoft.com/en-us/library/bb546085.aspx)以快速方式在两个进程之间进行通信。

答案 2 :(得分:2)

数据库。将您的值放入数据库,然后另一个应用程序将它们拉出相同的数据库。这是解决此问题的一种非常常见的解决方案,并打开了新场景的世界。

请参阅:Relation database

答案 3 :(得分:2)

我想说,这取决于很多事情。首先,它是“概览”应用程序中每行有用的最后一个值,还是需要多个值来确定行健康状况,或者您是否希望拥有值的历史记录?

如果您只对最后一个值感兴趣,我会直接将此值传达给概述应用。正如其他人所建议的那样,你有很多可能性:

  • 使用TcpClient的原始TCP(可能有点太低级)。
  • 在概览应用程序上公开一个http端点(可能是一个Web应用程序)并将新值发布到此端点。
  • 使用WCF在概述应用程序和通话中公开一些endpointnamed pipesnet.tcphttp等)来自每个客户端应用程序的此端点。
  • 使用MSMQ让每个客户端将消息排入队列,然后由概述应用程序选择(也由WCF直接支持)。

如果您需要一些值历史记录或者您需要多个值来确定行健康状况,我会使用数据库解决方案。然后,您必须再次选择:每个客户端是否写入数据库,或者每个客户端是否发布到概述应用程序(使用上述任何通信方式),并且概述应用程序是否写入数据库。

在不了解您的情况的任何限制的情况下,很难在任何这些之间做出决定。