4

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

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

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

私が見ている短所は、これが深刻なロジックの問題を引き起こす可能性があることです。プロセスの開始時にappsettingをチェックするものがあり、それが途中で変更されると、意図せずにプロセスフローを変更してしまう可能性があります。アプリケーションを完全に再起動する必要はありません。

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

アプリ設定を管理して、1つ、複数、またはすべてのサーバーを一度にリモートで変更できるようにするためのより良い方法はありますか?

4

3 に答える 3

4

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

  • ファイルシステムにアクセスでき、すべての設定を多数の*.configファイルに配置します。

また:

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

どちらのアプローチにも長所と短所があります。私は長い間、データベースフィールドから構成セクションを「具体化」する方法を見つけようとしてきました。これにより、基本的に構成XMLを使用できますが、データベースフィールドに格納されます。残念ながら、.NET 2.0構成システム全体は非常に「ロックダウン」されており、データがファイルから取得されることを前提としています。たとえば、データベースプロバイダーをプラグインして、構成システムがデータベースフィールドからコンテンツを読み取れるようにする方法はありません。 -(本当に残念です!

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

于 2009-09-11T11:21:54.853 に答える
2

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

ここでこの件について同様の質問があります: ネストされたapp.config(web.config)ファイル

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

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

編集:少し余分な情報:

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

MSDNから:

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

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

于 2009-09-11T11:22:57.957 に答える
2

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

于 2009-09-11T11:27:47.807 に答える