我的问题是,有没有一种好方法可以将整数值推送到正在运行的Windows服务,而无需重新启动它,也不写入磁盘或让它轮询某个数据库?
这是我的场景和一些想法: 我需要将数据实时传递到 Windows 服务,我不希望有延迟。 我需要给它的只是整数,它可以完成其余的工作。 我的前任将其设置为每 10 分钟轮询一次数据库,但这不再是一种选择。 我需要响应时间小于一秒。 我想从技术上讲,我可以将轮询时间减少到 0.5 秒,但我认为这对数据库服务器不利。 我知道您可以在 Windows 服务启动时将数据传递给它,但由于它正在做什么,重新启动此服务不是一种选择。
我很想使用 Web 服务,只需调用 Web 方法来传入数据,但任务需要提升(管理员)权限,并且几乎所有内容都涉及文件系统访问,所以我的理解是 Web 服务也不是最好的选择。
我想过使用混合方案,在同一台机器上运行 Web 服务和 Windows 服务,但随后我仍然遇到如何将整数从 Web 服务传递到 Windows 服务的问题......从技术上讲,我可以使用文件系统观察程序,但我真的不想仅仅为了传递整数而创建文件。 我想也许我可以使用 localDb 并让 Web 服务在那里写入值,并让 Windows 服务每 0.5 秒轮询一次 localDb,但我不确定轮询会对其他事物的整体性能产生多大影响。 我真的想要一种方法将数据推送到 Windows 服务,而不是让服务轮询到其他地方。
我从事的项目有一个前端 UI,可以与在同一系统上运行的 Windows 服务进行通信。 过去,我使用 Windows Communication Foundation (WCF),但发现这对于我真正需要的东西来说是重量级的。 我现在在本地主机地址 (127.0.0.1) 上使用 TCP 套接字在 UI 和服务之间交换数据。
根据您的描述,Web 服务方法似乎很重,有点像我们过去使用的 WCF 方法。 而且,正如您所指出的,它存在权限问题。 在我看来,通过套接字将整数推送到您的服务的简单应用程序很简单。
如果对 WCF 感兴趣,这里有几个链接可能会有所帮助:
创建用于监视正在运行的 Windows 服务并与之交互的用户界面
GUI 和 Windows 服务通信