0

Wenn ich typsichere Anwendungseinstellungen verwenden, ich so etwas in meiner app.exe.config Datei haben:Überwacht Änderungen an den Einstellungen in app.config

<setting name="IntervalTimeout" serializeAs="String"> 
    <value>10</value> 
</setting> 

Die Settings.Designer.vb tut etwas wie folgt aus:

<Global.System.Configuration.ApplicationScopedSettingAttribute(), _ 
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _ 
Global.System.Configuration.DefaultSettingValueAttribute("10")> _ 
Public ReadOnly Property IntervalTimeout() As Integer 
    Get 
     Return CType(Me("IntervalTimeout"),Integer) 
    End Get 
End Property 

Und ich kann die Einstellung mit so etwas wie diese zuzugreifen:

Settings.IntervalTimeout

Was ist die beste Methode, um Änderungen an dieser Einstellung von außen zu überwachen? I.e. Die Einstellung wird von einer Anwendung verwendet, die als Dienst ausgeführt wird, und wenn jemand die entsprechende Konfigurationsdatei öffnet und den IntervalTimeout auf 30 ändert, wird die Dienstanwendung benachrichtigt und tut alles, was ich ihr zur Neukonfiguration vorschlage.

Normalerweise würde ich so etwas wie dies bei der Initialisierung verwendet haben:

AddHandler Settings.PropertyChanged, New PropertyChangedEventHandler(AddressOf Settings_PropertyChanged) 

Und dann ein Eventhandler implementieren, die den Namen der Eigenschaft überprüft, die sich geändert hat und entsprechend reagiert.

Das PropertyChanged-Ereignis wird jedoch nur ausgelöst, wenn die Set-Methode für eine Eigenschaft aufgerufen wird, nicht wenn jemand die Daten direkt in der Datei ändert. Natürlich wäre das der Himmel gewesen, aber verständlich, dass das nicht so ist, wie es funktioniert. ;-)

Wahrscheinlich würde ich einen Dateisystemwächter implementieren, um Änderungen an der Datei zu überwachen und dann die Konfiguration neu zu laden, herauszufinden, was sich geändert hat, und dann alles Notwendige zu tun, um diese Änderungen wiederzugeben.

Kennt jemand einen besseren Weg? Oder sogar eine unterstützte?

Antwort

0

ASP.NET überwacht die Datei Web.config auf Änderungen. Dazu verwendet es die System.Web.FileChangesMonitor-Klasse (die intern und versiegelt markiert ist), die eine andere interne Klasse System.Web.FileMonitor verwendet. Schau sie dir im Reflektor an. Es könnte zu komplex für Ihr Problem sein, aber ich würde sicherlich nachsehen, ob ich eine ähnliche Anforderung hätte.

Das sieht ziemlich komplex aus. Denken Sie daran, dass ASP.NET die alte Anwendung herunterfährt und eine neue startet, sobald sie eine Änderung erkennt. App.config wurde nicht für die Erkennung von Änderungen während der Ausführung der Anwendung konzipiert. Vielleicht überdenken Sie, warum Sie das brauchen?

Ein einfacherer Ansatz besteht darin, den Dienst neu zu starten, sobald Sie die Änderung vorgenommen haben.