2013-07-12 71 views
2

因此,我正在使用Settings.settings在我目前正在使用的Windows服務上,它對我的​​需求正常工作。到目前爲止,唯一的問題是處理無效值的方式。據我所知,如果我編輯exe.config文件並在其中一個屬性中輸入無效值,則會使用在設計時捕獲的默認值。如何判斷exe.config在使用設置時是否具有無效值

如果您想保持服務運行無論如何都是好事,但我需要一種方法來查找它,這樣我才能通知用戶並防止他花費數小時來弄清爲什麼服務即使沒有錯誤報告,它也沒有按預期工作。

使用設置時,有沒有辦法檢查exe.config文件中的所有屬性是否有有效值?我一直無法找到任何。

+0

如果程序捕獲變量,難道你不能在程序中自己驗證它們嗎?也許我不明白你想要什麼。 – DanteTheEgregore

+0

嗯,我可以自己打開Xml並檢查值,但這會破壞使用Settings.settings的整個目的。我想這將是唯一的方法。似乎有點從微軟短視。 – JayPea

回答

1

您可以使用SettingsLoaded事件。打開Settings.cs文件並在構造函數中附上SettingsLoaded。 STHM這樣的:

// 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); 
     } 
    } 

} 
+0

謝謝!我認爲這與Erik Philips的使用無效默認值的建議相結合是一條路。 – JayPea

1

這是,如果你想保持你的服務無論在什麼上運行的所有好,但我需要一種方法來找到它,這樣我可以通知用戶,並阻止他花費數小時試圖弄清楚爲什麼服務不按預期工作,即使沒有錯誤報告。

這看起來和它應該做的完全相反。讓程序以無效的配置信息運行是沒有意義的。通常情況下,Windows服務在加載期間或某個時候需要刷新設置時需要驗證它們,如果不能,它應該寫入事件日誌然後停止。事件日誌應該寫入哪些參數不正確,並且通常由系統管理員來監視Error條件中的事件日誌。

另一種選擇是使用支持多種方式處理日誌記錄(對數據庫,郵件等)的日誌記錄系統(例如Log4net)。

如果您的問題是與默認值,我建議創建無效的默認值。

+0

是的,我實際上使用Log4Net。我同意使用無效配置運行沒有多大意義,這就是爲什麼我對Settings.settings實現感到有點驚訝(除非我錯了,它實際上並沒有回到默認值,但我認爲它)。 – JayPea

相關問題