2012-06-17 107 views
4

即使不知道如何提出这个问题,但我会给它一个镜头。获取从一个程序到另一个程序的变量

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

如果我的问题没有多大意义,让我知道,我会尝试重新翻译它。

谢谢!

+3

也许你可以将值写入数据库?这可能是最直接的方法。然后,其他应用程序或任何报告机制或其他商业智能需求将只从该数据库中读取。 – David

+0

感谢David我喜欢数据库的声音来完成这项工作,而且快速简单。 – user1003131

回答

2

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

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

  • 原始TCP使用TcpClient(可能有点太低级别)。
  • 在概览应用程序(可能是一个Web应用程序)上公开一个http端点并将新值发布到此端点。
  • 使用WCF以露出概述应用一些endpointnamedpipesnet.tcphttp等),并调用每个客户端应用此端点。
  • 使用MSMQ让每个客户端入队消息,然后由总览应用程序拾取(也直接由WCF支持)。

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

不知道任何更多的限制为您的情况,这是很难决定之间。

+0

感谢您对每个人的精彩概述!在这个网站上发帖总能节省我几天的研究和试验和错误。我喜欢数据库的想法,因为任何程序都可以访问数据库,因此如果有更多的程序需要访问数据,就可以进行扩展。该系统已经由sql server支持,以处理为每个新产品生成项目编号并标记与该产品相关的信息(即物理尺寸,生产日期和时间,传感器阵列的检测报告等)。通过另一个数据库,我可以每隔一秒左右用实时行数据更新它 – user1003131

3

您有几种选择:

  • MSMQ

写消息的MSMQ(Microsoft Message Queuing)。这是一个(可选)持久且快速的存储器,用于在机器之间传输消息。 既然你说你需要接近实时的其他应用程序中的消息,那么使用MSMQ是有意义的,因为你不想在该应用程序中编写逻辑来处理大量的传入消息。 把MSMQ放在中间,拿出你需要的东西,最重要的是当你可以的时候。

  • WCF

的其他应用程序可能使一个WCF服务,可以通过您的实时应用程序每次调用存在的数据可用。端点可能会超过net.tcp,这意味着低开销,特别是如果您发送小消息。

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

+1

我很喜欢MSMQ。 – Joe

+0

每个人都应该:)。实现起来非常简单,并且几乎没有开销,特别是在用作WCF协议时。 –

+0

hhmmm从来没有听说过MSMQ之前...我认为不适合使用数据库,因为系统的其他部分infastrucutre已经存在,但是由于听起来确实非常酷,所以我只是简单地对它进行研究。 – user1003131

2

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

+2

是的,但应该指出的是,当这些进程位于不同的机器上时它不起作用。 –

+0

感谢Sascha的回复,但我确实需要在单独的计算机上运行这些进程。谢谢你指出这个marclen。 – user1003131

2

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

看到:Relation database

相关问题