4

我什至不知道如何问这个问题,但我会试一试。

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

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

谢谢!

4

4 回答 4

3

你有几个选择:

  • MSMQ

将消息写入 MSMQ(Microsoft 消息队列)。这是用于在机器之间传输消息的(可选)持久且快速的存储。既然您说您需要近乎实时的其他应用程序中的消息,那么使用 MSMQ 是有意义的,因为您不想在该应用程序中编写逻辑来处理大量传入消息。将 MSMQ 放在中间,尽可能取出您需要的东西,最重要的是。

  • WCF

另一个应用程序可以公开 WCF 服务,每次有可用数据时,您的实时应用程序都可以调用该服务。端点可能在 net.tcp 上,这意味着开销较低,尤其是在您发送小消息时。

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

于 2012-06-17T16:52:26.697 回答
2

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

于 2012-06-17T16:53:27.310 回答
2

一个数据库。将您的值放入数据库,然后其他应用程序将它们从同一个数据库中提取出来。这是解决这个问题的一个非常常见的解决方案,并开辟了新场景的世界。

参见:关系数据库

于 2012-06-17T16:58:43.593 回答
2

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

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

  • 使用TcpClient的原始 TCP (可能有点太低级了)。
  • 在概览应用程序(可能是 Web 应用程序)上公开一个 http 端点并将新值发布到此端点。
  • 使用WCF在概览应用程序上公开一些端点命名 管道net.tcphttp等)并从每个客户端应用程序调用此端点。
  • 使用 MSMQ 让每个客户端将消息排入队列,然后由概览应用程序拾取(WCF 也直接支持)。

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

在不了解您的情况的任何更多限制的情况下,很难在其中任何一个之间做出决定。

于 2012-06-17T17:03:36.900 回答