configuration - 为 Windows 服务保留用户可编辑设置的最佳方式是什么?

标签 configuration windows-services settings app-config

我正在开发一个应用程序,它将被实现为 window 服务 我想知道处理不同 的最佳方法是什么设置 (在用户和应用程序级别)。问题是,我对所有可用选项并不完全熟悉(还),所以原则上我更喜欢 .NET 自己的 系统配置 (ConfigurationManager.RefreshSection("appSettings") 似乎很诱人),尽管我仍然无法理解整个画面,即 在哪里应用程序配置为给定服务存储的文件,依此类推。

所以我对你们的问题是,为给定的 Windows 服务存储用户可编辑的配置详细信息的最佳方式是什么?提前感谢大家的反馈。

最佳答案

嗯... Windows 服务的“用户可编辑”配置设置...

要记住的是,Windows 服务在后台运行,因此它没有直接的方式让用户与之交互。我为解决这个问题所做的是创建一个单独的前端应用程序,该应用程序使用 WCF 与 Windows 服务进行通信。通过这种方式,“用户可编辑”配置设置作为前端应用程序设置的一部分保留,而不是 Windows 服务。当用户更改设置时,使用一系列 WCF 消息将设置简单地传送给 Windows 服务。

在我的例子中,我什至在我的前端应用程序中添加了一个 NotifyIcon 并添加了逻辑,以便在应用程序最小化时可以从任务栏中删除它。当您打开“最小化时隐藏”选项时,它的工作方式与任务管理器的工作方式相同。这给了用户直接与服务交互的错觉,即使它是两个完全独立的进程。

编辑:

作为对您的评论的回应,WCF 只是一个消息传递 API。消息通常定义为用 DataContract 和 DataMember 属性修饰的类。 ServiceContract 和 OperationContract 属性定义 WCF 服务接口(interface)。一旦定义了这些,在 Windows 服务中创建和托管 WCF 服务就很容易了。如果您有 Visual Studio 2008,创建客户端代理是一件轻而易举的事,因为 VS2008 可以为您自动完成。

完成所有这些后,您的前端应用程序只需实例化客户端代理的实例并调用该代理上的方法。在调用每个方法时,WCF 框架负责将消息序列化并将其发送到 WCF 服务以供其操作。然后它将任何响应(包括异常)序列化回代理。从客户端的角度来看,例如您的前端应用程序,您只是调用了一个函数。这就是 WCF 的魅力所在!它非常类似于套接字编程,只是您不必管理连接。 WCF 会为您处理所有这些管道。

当然,所有这些都假设您至少可以使用 .NET 3.0。如果您使用的是 Visual Studio 2008,那么您的状态就很好。这里有几个教程可以帮助您入门:

  • WCF Essentials
  • WCF Services

  • 掌握基本概念后,我建议您查看 Juval Lowy 的 website .那里有很多与 WCF 相关的免费下载,我发现它们对查看很有帮助,尽管它更高级一些。在深入研究之前先了解 WCF 概念。

    同样,这样做的重点是帮助您的用户配置 Windows 服务的各个方面。如果您不提供前端 GUI 来执行此操作,我不确定他们会如何在手动操作 app.config 文件本身的情况下做到这一点。

    希望这可以帮助。

    关于configuration - 为 Windows 服务保留用户可编辑设置的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1202835/

    相关文章:

    c# - 什么是自托管?它可以与 web api 一起使用来与设备通信吗?

    c# - 查找哪个服务已在 C# 中运行可执行文件

    ios - 可以将 Analytics 划分为 DEBUG 和 RELEASE 吗?

    configuration - beresp.grace 和 obj.grace 有什么区别

    .net-core - 在 .NET Core Worker 服务中根据 Configuration 注册 Hosted Services

    android - 如何在小部件中收听 Intent.ACTION_CONFIGURATION_CHANGED 广播?

    settings - Ivy 配置: Why the difference between these?

    objective-c - 在 iOS 上处理复杂配置的首选方式/设计模式

    java - 为什么 Spring propertyplaceholder 没有检测到我对系统属性的更改?

    ios - 是否可以将自定义设置注入(inject)我的 iOS 应用程序 "Notifications"设置对话框?