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

How to push data to a running Windows Service

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

这是我的情景和一些想法: 我需要实时将数据传递给 windows 服务,我不希望有延迟。我需要给它的只是整数,它可以完成剩下的工作。我的前任将其设置为每 10 分钟轮询一次数据库,但这不再是一个选项。我需要响应时间少于一秒。我想从技术上讲我可以将轮询时间减少到 0.5 秒,但我认为这对数据库服务器不利。我知道您可以在 windows 服务启动时将数据传递给它,但由于它正在执行的操作,因此无法重新启动该服务。

我很想使用 Web 服务并只调用 Web 方法来传递数据,但任务需要提升(管理员)权限并且几乎所有内容都涉及文件系统访问,所以我的理解是 Web 服务不是'这也不是最好的选择。

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

我从事的项目有一个前端 UI,它与同一系统上的 Windows 服务 运行 进行通信。过去,我使用 Windows Communication Foundation (WCF),但发现它对于我真正需要的东西来说太重量级了。我现在在本地主机地址 (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