0

Lorsque j'utilise Typesafe paramètres d'application, j'ai quelque chose comme ça dans mon fichier app.exe.config:Surveiller les modifications apportées aux paramètres dans app.config

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

Le Settings.Designer.vb fait quelque chose comme ceci:

<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 

Et je peux accéder au paramètre avec quelque chose comme ceci:

Settings.IntervalTimeout

Quelle est la meilleure pratique pour surveiller les modifications apportées à ce paramètre de l'extérieur. C'est à dire. le paramètre est utilisé par une application qui s'exécute en tant que service et quand quelqu'un ouvre le fichier de configuration corresponsant et modifie IntervalTimeout pour dire 30, l'application de service est notifiée et fait tout ce que je lui dis de faire pour se reconfigurer.

Habituellement, je l'aurais utilisé quelque chose comme ceci lors de l'initialisation:

AddHandler Settings.PropertyChanged, New PropertyChangedEventHandler(AddressOf Settings_PropertyChanged) 

Et puis mettre en œuvre un eventHandler qui vérifie le nom de la propriété qui a changé et réagit de façon appropriée.

Toutefois, l'événement PropertyChanged n'est déclenché que lorsque la méthode Set est appelée sur une propriété, et non lorsque quelqu'un modifie les données directement dans le fichier. Bien sûr, cela aurait été le paradis, mais compréhensible que ce n'est pas la façon dont cela fonctionne. ;-)

Très probablement, j'implémenterais un système de fichiers pour surveiller les modifications apportées au fichier, puis recharger la configuration, découvrir ce qui a changé et faire tout ce qui est nécessaire pour refléter ces changements.

Est-ce que quelqu'un connaît un meilleur moyen? Ou même un supporté? ASP.NET surveille le fichier Web.config pour les modifications.

Répondre

0

Il le fait en utilisant la classe System.Web.FileChangesMonitor (marquée interne et scellée), qui utilise une autre classe interne System.Web.FileMonitor. Jetez un oeil à eux dans le réflecteur. C'est peut-être trop complexe pour votre problème, mais je l'examinerais certainement si j'avais une exigence similaire.

Cela semble assez complexe. Gardez à l'esprit qu'ASP.NET arrête l'ancienne application et en démarre une nouvelle dès qu'elle détecte une modification. App.config n'a pas été conçu pour détecter les modifications pendant l'exécution de l'application. Peut-être reconsidérer pourquoi vous en avez besoin?

Une approche plus simple consiste à redémarrer le service une fois que vous avez effectué la modification.

Questions connexes