2

所以我正在使用Settings.settings我目前正在开发的 Windows 服务,它可以很好地满足我的需求。到目前为止,我遇到的唯一问题是处理无效值的方式。据我所知,如果我编辑exe.config文件并在其中一个属性中输入无效值,则将使用在设计时捕获的默认值。

如果您无论如何都想保持服务运行,这一切都很好,但我需要一种方法来找到它,以便我可以通知用户并防止他花费数小时试图找出服务不工作的原因即使没有报告错误,也符合预期。

exe.config有没有办法在使用设置时检查所有属性在文件中是否具有有效值?我一直找不到。

4

2 回答 2

1

您可以使用SettingsLoaded事件。打开Settings.cs文件并在构造函数中附加SettingsLoaded. 像这样的东西:

// This class allows you to handle specific events on the settings class:
//  The SettingChanging event is raised before a setting's value is changed.
//  The PropertyChanged event is raised after a setting's value is changed.
//  The SettingsLoaded event is raised after the setting values are loaded.
//  The SettingsSaving event is raised before the setting values are saved.
internal sealed partial class Settings {

    public Settings() {
        this.SettingsLoaded += OnSettingsLoadedEvent;
    }

    private void OnSettingsLoadedEvent(object sender, SettingsLoadedEventArgs settingsLoadedEventArgs)
    {
        if (SomeNumParam >= 100)
        {
            const string msg = "SomeNumParam is invalid! Value must be between 0 and 100";
            Console.WriteLine(msg);
            throw new ArgumentOutOfRangeException(msg);
        }
    }

}
于 2013-07-17T04:50:01.117 回答
1

如果您想无论如何都保持服务运行,这一切都很好,但我需要一种方法来找到它,以便我可以通知用户并防止他花费数小时试图找出服务不工作的原因即使没有报告错误,也符合预期。

这似乎与它应该做的完全相反。使用无效配置信息运行程序是没有意义的。通常,Windows 服务在加载期间或在某些时候需要刷新设置,需要验证它们,如果不能,它应该写入事件日志然后停止。事件日志应写入哪些参数不正确,并且通常由系统管理员监控错误情况下的事件日志。

另一种选择是使用日志系统(例如Log4net),它支持多种方式来处理日志(到数据库、邮件等)。

如果您的问题是默认值,我建议创建无效的默认值。

于 2013-07-17T07:10:32.683 回答