質問

web.config(または、この場合、appsettingsノードを含むapplication.configファイル)を変更せずに、アプリケーションをより拡張可能かつ操作しやすくする方法を検討しています。

私が考えた1つの方法は、sqlcachedependancyを持つデータベーステーブルにアプリの設定を保持することです。つまり:

  • データベースの設定が変更されるたびに、キャッシュが無効になり、設定が再度取得されるため、ファイルを変更してアプリ全体を再起動することなく、リアルタイムでアプリケーションが更新されます。
  • 設定を変更できるカスタムツールを作成できます。

私が見る短所は、これが深刻なロジックの問題を引き起こす可能性があることです。完全なアプリケーションの再起動の要件が否定されるため、フロー。

これを回避する方法はありますか?

appsettingsを管理するより良い方法はありますか。そのため、1つ、複数、またはすべてのサーバーに対してリモートでオンザフライで変更できますか?

役に立ちましたか?

解決

2人の主要プレーヤーを釘付けにしたと思います:

  • ファイルシステムへのアクセス権があり、すべての設定を多数の* .configファイルに配置します

または:

  • サーバーのファイルシステムへのアクセス権がない(または非常に限られたアクセス権しかない)ため、基本的には構成設定とユーザー設定をデータベースに入れて、基本的には構成ファイルへの接続文字列のみを残す方がよいディスク上

どちらのアプローチにも長所と短所があります。私は「マテリアライズ」する方法を見つけるために長い間努力してきました。データベースフィールドの設定セクション。基本的には設定XMLを使用できますが、データベースフィールドに保存されます。残念ながら、.NET 2.0構成システム全体は非常に「ロックダウン」されています。そして、データがファイルから来ると仮定するだけです-例えば、プラグインする方法はありません構成システムがデータベースフィールドからその内容を読み取ることを許可するデータベースプロバイダー:-(本当に悪い!

私が見た他の唯一のアプローチは、「ConfigurationService」です。 Microsoftが提供する StockTrader 2.0サンプルアプリにありますが、必要に応じて、やり過ぎのように感じられ、非常に複雑で非常に重いサブシステムのように感じました。

他のヒント

SQLiteを使用することができます。これは、単一ファイル内の自己完結型のDBになります。一石二鳥?

appsettingsを含む外部設定ファイルを参照する場合(通常のapp.configに他のすべてを残します)、編集するとそれらの設定が再ロードされるだけで、アプリ全体が強制的に再起動されることはありません。

この件に関しては、同様の質問があります。 入れ子になったapp.config(web.config)ファイル

WRTはプログラム実行の途中で値が変化する問題です。値をローカルにキャッシュし、値が変化するとイベントを発生させ、更新された値を使用する前にルーチンが適切なポイントに到達できるようにします。

asp.netでは、各ページのライフサイクルが異なるため、これを無料で入手できると思います。そのため、値は実行中ではなく、新しいページリクエストにのみ適用されます。

編集:少し余分な情報:

構成の変更によりアプリケーションドメインが再起動する

MSDN から:

  

Web.configファイルの構成設定を変更すると、アプリケーションドメインが間接的に再起動します。この動作は仕様により発生します。オプションでconfigSource属性を使用して、変更が行われたときに再起動を引き起こさない外部構成ファイルを参照できます。詳細については、セクション要素によって継承される一般属性のconfigSourceを参照してください。

ConfigurationManagerクラスの詳細変更に使用できる System.Configuration名前空間構成ファイルをプログラムで(つまり、関連するディスク読み取りアクセス許可を提供できる場合は、カスタムツールで)。組み込みの構成クラスの使用に固執すると、外部構成を変更しても、アプリケーションが再起動されることはなく、イベント(プロパティが変更されました)、設定を変更してもコードがキャッチされないようにすることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top