观察多个窗口服务
我想对我目前计划的设计进行输入。观察多个窗口服务
基本上,我有一些外部仪器,其中每个应始终运行,收集特定的数据。我的想法是为每个服务创建一个服务,一直运行和轮询仪器,执行日志记录等。可能有一个仪器,或者可能有40个。但是,我需要一个应用程序来消耗所有这些数据,运行一些数学计算,并做图表,显示,电子邮件等。踢球者是,即使这个应用程序没有运行,服务应该不断消耗数据。此外,这些服务应该几乎总是应该与客户端应用程序本身运行在同一台机器上,但将它们联网的能力(如.NET Remoting曾经这样做)可能是一个有趣的功能。
我的问题是...这是最好的设计?如果是这样,我该如何去做服务和应用程序之间的通信?我研究过WCF,但它似乎适用于请求响应Web服务,而不是将数据连续地传输到任何可能听到它的东西。或者,我是否应该使用WCF与其他Web服务联系,然后编译这些数据以用于经常查询Web服务的瘦客户机查看器中?
任何链接和资源将不胜感激。 .NET名称空间供我研究,也感谢。如果我不清楚让我知道的事情。
只是一个想法....但你有没有考虑过可能添加一个后端数据库?所有服务都可以整理数据并保存它,然后,需要处理信息的应用程序可以查询数据库,而不是在服务之间设置大量的IPC。
WCF可以处理流式传输。它也可以使用MSMQ作为传输方式,即使您的仪器开始大量生成数据,也可确保不会丢失任何消息。
我认为这将是最稳健的设计,但不幸的是,我在这方面遇到了一些时间问题,而没有大量优秀资源/教程的WCF/MSMQ学习似乎不适合这个特定项目。当我停下来了解这些事情时,我会保存这个想法。 – drharris 2010-04-20 20:56:52
请参阅http://msdn.microsoft.com/en-us/netframework/dd939784.aspx。这并不难。一旦你配置了队列,配置WCF使用它几乎是微不足道的。 – 2010-04-21 00:49:40
我曾考虑过这个问题,但问题比这更复杂......每台仪器的生成速度都是1MB /秒。当客户端应用程序正在运行时,它会合成到约1KB /秒,实际上需要存储,这更易于管理。但是,当这个客户端没有运行时,很容易看到数据库将如何增长到难以想象的比例(对于台式计算机)。基本上,我需要将它设置到无法观察的地方,数据将被忽略(但以简写形式记录)。 – drharris 2010-04-20 19:50:53
@drharris,那么你可以在数据库中有一个字段(类似于网站所做的),表明客户端应用程序正在运行。只有在客户端正在运行时才保留数据,否则,只需将其记录到文件即可。 – James 2010-04-20 20:45:54
我的第一个想法是,如果应用程序崩溃会发生什么。但是我可以用DateTime对它进行标记,并且只有在过去X分钟内或类似的情况下才会持续。男人,我讨厌进入DBA工作,但我认为这可能是我唯一的选择。 MSMQ在体系结构方面太复杂了,虽然我喜欢WCF的网页内容,但看起来好像过度。我认为DB是要走的路。 – drharris 2010-04-20 20:54:17