我正在开发一个将作为 Windows服务实施的应用程序,我想知道处理不同设置的最佳方式是什么(在用户和应用程序级别)。问题是,我对所有可用选项并不完全熟悉,所以原则上我喜欢.NET自己的 System.Configuration (ConfigurationManager.RefreshSection(“appSettings”)似乎很诱人),虽然我仍未能全面了解整个图片,即为给定服务存储的 app.config 文件在哪里,等等。
所以我的问题是,对于给定的Windows服务,存储用户可编辑配置详细信息的最佳方法是什么?提前感谢大家的反馈。
答案 0 :(得分:4)
嗯......用户可编辑的Windows服务配置设置......
要记住的是Windows服务在后台运行,因此用户无法直接与其进行交互。我为解决这个问题所做的是创建一个单独的前端应用程序,使用WCF与Windows服务进行通信。这样,“用户可编辑”配置设置将作为前端应用程序设置的一部分而不是Windows服务保留。当用户更改设置时,使用一系列WCF消息将设置简单地传达给Windows服务。
在我的情况下,我甚至在我的前端应用程序中添加了NotifyIcon并添加了逻辑,以便在最小化时可以从任务栏中删除应用程序。当您打开“最小化时隐藏”选项时,它的工作方式与任务管理器的工作方式相同。这为用户提供了直接与服务交互的假象,即使它是两个完全独立的过程。
编辑:
在回复您的评论时,WCF只是一个消息传递API。消息通常定义为使用DataContract和DataMember属性修饰的类。 ServiceContract和OperationContract属性定义WCF服务接口。一旦定义了这些,就可以轻松地在Windows服务中创建和托管WCF服务。如果你有Visual Studio 2008,那么创建客户端代理就很容易,因为VS2008可以为你自动化它。
完成所有这些后,您的前端应用程序只是实例化客户端代理的实例并调用该代理上的方法。在调用每个方法时,WCF框架负责序列化并将消息发送到WCF服务以使其作用。然后,它将任何响应(包括异常)序列化回代理。从客户端(例如,您的前端应用程序)的角度来看,您只需调用一个函数。这就是WCF的美丽!它与套接字编程非常类似,除了您不必管理连接。 WCF会为您处理所有管道。
当然,所有这些都假设您至少可以使用.NET 3.0。如果您使用的是Visual Studio 2008,那么您的状态良好。以下是一些帮助您入门的教程:
一旦你掌握了基本概念,我建议你看看Juval Lowy的website。我发现有很多免费的WCF相关下载,我觉得它们非常有用,虽然它有点先进。在深入研究之前先了解WCF概念。
同样,这一点的重点是帮助您的用户配置Windows服务的各个方面。如果您没有提供前端GUI来执行此操作,我不确定他们如何操作app.config文件本身。
希望这有帮助。
答案 1 :(得分:3)
如果您只需要一个名称/值字典来存储配置参数,那么app.config是最简单的答案。在你的解决方案中,它被称为“app.config”,但是当它被构建时,它被重命名为可执行文件的名称+“。config”。