0

タイプセーフなアプリケーション設定を使用すると、app.exe.config ファイルに次のようなものがあります。

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

Settings.Designer.vb は次のようなことを行います。

<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

そして、次のような方法で設定にアクセスできます。

Settings.IntervalTimeout

この設定の変更を外部から監視するためのベスト プラクティスは何ですか。つまり、設定はサービスとして実行されているアプリケーションによって使用され、誰かが対応する構成ファイルを開いて IntervalTimeout を 30 などに変更すると、サービス アプリケーションは通知を受け取り、自分自身を再構成するために私が指示したことを何でも実行します。

通常、初期化中に次のようなものを使用していました。

AddHandler Settings.PropertyChanged, New PropertyChangedEventHandler(AddressOf Settings_PropertyChanged)

そして、変更されたプロパティの名前をチェックし、適切に反応する Eventhandler を実装します。

ただし、PropertyChanged イベントは、Set メソッドがプロパティで呼び出されたときにのみ発生し、誰かがファイル内のデータを直接変更した場合には発生しません。もちろん、これは天国だったでしょうが、これがうまくいかないことは理解できます。;-)

おそらく、filesystemwatcher を実装してファイルの変更を監視し、構成をリロードして、何が変更されたかを調べ、それらの変更を反映するために必要なことをすべて実行します。

誰かがより良い方法を知っていますか? それともサポートされているものですか?

4

1 に答える 1

0

ASP.NETは、Web.configファイルの変更を監視します。これは、別の内部クラスSystem.Web.FileMonitorを使用するSystem.Web.FileChangesMonitorクラス(内部および封印されているとマークされている)を使用して行われます。リフレクターでそれらを見てください。あなたの問題には複雑すぎるかもしれませんが、私が同様の要件を持っていれば、私は確かにそれを調べます。

これはかなり複雑に見えます。ASP.NETは、変更を検出すると、古いアプリケーションをシャットダウンし、新しいアプリケーションを開始することに注意してください。App.configは、アプリケーションの実行中に変更を検出するように設計されていませんでした。おそらく、なぜこれが必要なのかを再考しますか?

より簡単な方法は、変更を加えたらサービスを再起動することです。

于 2009-07-09T10:14:28.730 に答える