如何在运行时更改Windows Service的设置?与运行的Windows服务交互?
假设我将文件从一个目录处理到另一个目录。我希望能够声明下一个文件的输出和操作(当服务正在运行时)。如果我可以通过网站远程编辑它(SQL表或XML/TXT文件),那将是完美的。
是否有可能不重新启动服务?我可以简单地在服务“”中写入每个文件读取操作和从设置文件输出“吗?
我宁愿避免现在的Windows Communication Foundation。
如何在运行时更改Windows Service的设置?与运行的Windows服务交互?
假设我将文件从一个目录处理到另一个目录。我希望能够声明下一个文件的输出和操作(当服务正在运行时)。如果我可以通过网站远程编辑它(SQL表或XML/TXT文件),那将是完美的。
是否有可能不重新启动服务?我可以简单地在服务“”中写入每个文件读取操作和从设置文件输出“吗?
我宁愿避免现在的Windows Communication Foundation。
假设你还写了Windows服务,您可以发送自定义命令到服务。从控制器端,您使用ServiceController.ExecuteCommand()
发送命令。在服务类上,您覆盖ServiceBase.OnCustomCommand()
以处理这些命令。
但是,这只会帮助您触发某个操作。您仍然必须使用外部方法(例如共享配置文件)来传达操作的详细信息。
+为简单起见。 – Phil 2011-05-06 13:49:31
yosh - 您提出的两个选项可以工作,该服务可以在处理文件夹之前重复读取文件settings.xml。您可以在不重新启动服务的情况下远程修改。
轮询文件系统? – Phil 2011-05-06 13:39:23
很多选项。有许多可以使用的进程间通信机制 - COM,套接字,命名管道,共享内存 - 为管理界面提供“重新读取设置”命令。
或者,您可以让服务监视配置文件的更改;在Win32 API中,相关功能是FindFirstChangeNotification()
;不确定是否有管理的等价物,最坏的情况 - 使用P/Invoke。
你可以使用一个数据库,保存和检索信息,但除非你已经在使用一个数据库,这可能是矫枉过正,以建立一个新的表,连接到它,等
我个人会建议使用* .config并使用OpenExeConfiguration。同时,公开一些可以访问/修改这些设置的方法,然后在需要时使用它们。
最后,您可以拥有自己的具有这些值的XML文件并存储/检索值(甚至可以利用XmlSerializer),可以在处理时查询这些值。
您可以设置FileSystemWatcher来监视配置文件,以便配置更改在更新后立即重新加载。
http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx
这是一个耻辱,你想避免WCF。这将使与服务的丰富通信几乎微不足道。 – 2011-05-06 16:11:17