如何在Windows服务运行时更改设置?
比如说,我要将文件从一个目录处理到另一个目录。我想能够声明下一个文件的输出和操作(在服务运行时)。如果我可以通过网站远程编辑它就更好了(可以是SQL表,也可以是XML/TXT文件)。
是否可能在不重新启动服务的情况下实现?我是否可以在服务内部简单地编写“对于每个文件,从设置文件中读取操作和输出”?
我当前希望避免使用Windows Communication Foundation。
如何在Windows服务运行时更改设置?
比如说,我要将文件从一个目录处理到另一个目录。我想能够声明下一个文件的输出和操作(在服务运行时)。如果我可以通过网站远程编辑它就更好了(可以是SQL表,也可以是XML/TXT文件)。
是否可能在不重新启动服务的情况下实现?我是否可以在服务内部简单地编写“对于每个文件,从设置文件中读取操作和输出”?
我当前希望避免使用Windows Communication Foundation。
ServiceController.ExecuteCommand()
发送命令。在服务类上,您需要重写ServiceBase.OnCustomCommand()
以处理命令。yosh - 你提出的两个选项都可以实现,服务可以在处理文件夹之前重复读取settings.xml文件。你可以远程调整它而无需重新启动服务。
http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx
多种选择。您可以使用许多进程间通信机制,如COM、套接字、命名管道、共享内存等,提供带有“重新读取设置”命令的管理界面。
或者,您可以让服务监视配置文件的更改;在Win32 API中,相关函数是FindFirstChangeNotification()
;不确定是否有托管等效项,最坏情况下-使用P/Invoke。
你可以使用数据库来保存和检索信息,但是除非你已经在使用数据库,否则设置新表格、连接等可能会过度。
我个人建议尝试使用 *.config 并使用 OpenExeConfiguration。此外,公开一些方法以访问/修改这些设置,然后在需要该值时使用它们。
最后,你可以拥有自己的 XML 文件,其中包含这些值,并存储/检索这些值(甚至利用 XmlSerializer),在处理时可以查询它们。