如何将数据推送到正在运行的Windows服务

时间:2017-03-30 17:41:54

标签: web-services wcf service windows-services localdb

我的问题是,是否有一种很好的方法可以将整数值推送到正在运行的Windows服务而无需重新启动它而无需写入磁盘或轮询某些数据库?

这是我的场景和一些想法: 我需要实时将数据传递给Windows服务我不希望有延迟。所有我需要给它的是整数,它可以完成剩下的工作。我的前任已经开始每10分钟轮询一次数据库,但这不再是一种选择。我需要的响应时间不到一秒钟。我认为技术上我可以将轮询时间减少到0.5秒,但我认为这对数据库服务器来说会很糟糕。我知道你可以在启动时将数据传递给Windows服务,但由于它正在做什么,重新启动此服务不是一种选择。

我希望使用网络服务,只需调用网络方法传入数据,但任务需要提升(管理员)权限,而且几乎所有内容都涉及文件系统访问权限,所以我的理解是网络服务不是真的也是最好的选择。

我曾想过使用混合方案,我在同一台机器上运行Web服务和Windows服务,但后来我仍然遇到如何将整数从Web服务传递到Windows服务的问题......我可以在技术上使用文件系统观察程序,但我真的不想创建一个文件只是为了传递一个整数。我想也许我可以使用localDb并让web服务只是在那里写入值并让Windows服务每隔0.5秒轮询一次localDb,但我不确定轮询会对其他东西的整体性能有多大影响。我真的想要一种方法将数据推送到Windows服务,而不是在其他地方进行服务调查。

1 个答案:

答案 0 :(得分:1)

我工作的项目有一个前端UI,它与在同一系统上运行的Windows服务进行通信。在过去,我使用了Windows Communication Foundation(WCF),但发现这对我真正需要的东西来说很重要。我现在在localhost地址(127.0.0.1)上使用TCP套接字在UI和服务之间交换数据。

根据您的描述,Web服务方法看起来很重,有点像我们以前使用的WCF方法。而且,正如您所指出的,它存在权限问题。通过套接字将整数推送到服务的简单应用程序在我看来很简单。

如果感兴趣的是WCF,可以使用以下几个链接:

Creating a user interface for monitoring and interacting with a running windows service

GUI and windows service communication