我正在开发一个应用程序来监控我们的软件套件的信息,所以我只能访问我自己的项目修改代码,而另一半将取决于套件程序员。这些程序将在同一台计算机上运行,监控软件作为服务运行。
我很感兴趣的一条路线是如何在应用程序或进程之间共享或传递信息。我们只是说数据是什么类型,无论是发送字节还是字符串等都不重要(尽管内心深处都是相同的)。
打开TCP / IP侦听器/连接以将数据发送到同一台计算机似乎有点过分,只是为了侦听某个端口来接收信息。还有哪些其他选择?我已经对数据映射进行了一些研究,但我唯一担心的是该套件是用delphi编写的,所以我不确定c#和delphi之间用于访问数据映射的兼容性(delphi甚至可以做这样的事情是一个研究点我会研究。)
所以我的问题是,在TL; DR有点方式,在进程间级别传输数据有哪些选项?
答案 0 :(得分:2)
我看一下WCF(使用命名管道),它非常适合进行应用程序间通信。
答案 1 :(得分:1)
在这种情况下,我可能会使用监控服务作为客户端之间的通信方式(例如,使用轮询系统),并使用NetNamedPipeBinding在同一台计算机上进行跨进程通信。请参阅http://msdn.microsoft.com/nl-be/library/ms752247.aspx。
另见How can I communicate with WCF from Delphi using Named Pipes Binding关于从Delphi应用程序与WCF的通信。
这种方法的优点是,您可以轻松地将其扩展到集中式系统,在这种情况下,如果需要,您可以拥有后端和多个客户端。
答案 2 :(得分:1)
这里有很多选择。我会研究命名管道,以实现快速,高效的进程间通信。然而,有另一种选择让人想起,那就是WMI
您要做的是在您的Delphi程序中实现WMI提供程序,您可以在其中发布监视数据。然后,您的监控服务将使用WMI查询读取数据。
这有一些优点。它不会对您的部署设置施加任何限制,因为它可以像本地一样远程查询WMI。因此,即使您现在的目标是本地解决方案,您也可以稍后通过远程调用WMI而不是本地调用WMI来轻松适应远程设置。
它还允许进程彼此独立工作,这样您就可以以任何您想要的Delphi套件的速率发布统计信息,并独立于您的监控服务进行轮询。这里甚至还有一些活动支持。