我在
Windows服务(.NET C#)中有一个计时器.我需要能够从外部程序更改已用值.如果计时器当前正在运行,我需要能够缩短外部程序的经过时间值.我想在服务中使用一个公共方法来改变计时器经过的值并重新启动计时器,但是外部程序可以在Windows服务上调用公共方法吗?
解决方法
简而言之,不可能在另一个进程中直接调用函数.包含您要访问的功能(在本例中为Windows服务)的进程需要通过某种IPC(进程间通信)公开它.您选择哪种类型的IPC可能取决于通信需要多复杂,以及“客户端”是否是.NET应用程序.
如果您的需求很简单(例如,只设置一个计时器值),或者您的客户端不使用.NET,则使用命名管道(或TCP,如果您需要从另一台物理计算机访问该服务)可能是您最好的选择.命名管道和TCP都为您提供了一个Stream,您可以将消息写入另一端并在另一端读取.
如果您需要公开许多不同的功能或发送和接收复杂的数据类型,并且如果您在两端都使用.NET,那么.NET Remoting或WCF可能是最好的. .NET Remoting更简单但有更多限制; WCF非常灵活,但学习曲线更陡峭.