5


2

ASP.NETでアプリケーション構成を管理するにはどうすればよいですか?

ASP.Netアプリケーションの構成を管理してさまざまなクライアントに展開するのが困難です。 調整が必要なさまざまな設定の膨大な量は多大な時間を要し、現在の構成方法は複雑すぎて、この責任をサポートパートナーに押し出すことができません。

これを処理するためのより良い方法や、研究のための情報源についての提案はありますか?

現在の私たちのやり方:

  • Web.Configで参照されるさまざまなxml構成ファイル、 たとえば、AppSettings.xml。

  • 特定のサイトの構成は重複した構成で保持されます ファイル

  • サイト固有のデータのリストを含むテキストファイル

  • 場合によっては、データベースに対する手動の一時的な変更

  • Windsor IOCのC#構成。

私たちが抱えている特定の問題:

  • 異なる機能が有効化された異なるサイト、異なる外部 話をしなければならないサービスとさまざまなビジネスルール。

  • さまざまな展開タイプ(ライブ、テスト、トレーニング)

  • 設定キーはバージョン間で変更されます(追加、削除)。つまり、 すべての重複ファイルを更新する必要があります

  • アプリケーションの実行中にキーを変更できる必要があります ランニング

これにどのようにアプローチするかに関する現在の考えは次のとおりです。

  • 構成を動的にコンパイルされたコード(おそらくBoo、 BinsorまたはJavaScript)

  • いくつかの形式の差分/マージ構成がある:デフォルトを組み合わせる live / test / training設定とサイト固有の設定を使用した設定

3 Answer


2


どちらにしても、設定に単一の「真実の源」という概念を持つことは価値があると思います。

一部のコンポーネントに独自の特殊な形式で構成を提供する必要がある場合、複製は問題ありません。

しかし、あなたの正気を保つために、あなたはあなたがあなたのアプリケーションに関係するすべての設定を設定し、それをWeb.config内のエントリに変換するための明確に定義されたメカニズム、そしてサポートする必要があります。

サポートパートナーのスキルレベル(XMLを壊すかどうか)に応じて、GUIユーティリティを提供して、この "真実の源"構成ファイルのすべてのノブを、変換/更新コードを実行して実行し、Web.configとフレンドに必要な変更を加えます。

次に、さまざまなサイト/顧客の構成を管理するために、理論的には管理する構成ファイルが1つ前後あります。

注意: ASP.NET 4.0では、ビルド時の構成変換メカニズムが利用可能になります(http://blog.hmobius.com/post/2010/02/17/ASPNET-40-Part-4-Config-Transformationを参照してください) -Files.aspx)。これにより、このタスクが簡単になります。 非Webプロジェクトのハッキングでこれを使用できるようです(http://philbolduc.blogspot.com/2010/03/using-config-transforms-outside-web.htmlを参照)。

ただし、展開時にこれらの変更を行う必要がある場合、これを行うためのカスタムツールの作成にこだわる場合がありますが、XDT変換は、追加/アイテムを更新/削除します。


0


上記の構成アイテムを使用するコードが管理/変更可能なコードである場合(およびすべてがマネージコードスペース/ C#で実行されている場合)、少なくともGetStringを持つシングルトンのようなクラスへの呼び出しの設定を取得するメソッド呼び出しを移植することを検討します()メソッド。

GetObject()は非常に便利です(.Net XMLシリアル化に関するものをチェックしてください-アメリカ人は 'z':シリアル化で綴ります)…​ 多くのものに役立ちますが、ストア内の単一のエントリに関連する構成アイテムのパッケージ化を開始できることも意味します。

単一のストア(キャッシュされたアクセスを備えたデータベーステーブル)の使用に関して、または構成アイテムの格納場所をカプセル化するためにのみ新しい構成ファサードを使用します-それはあなた次第です…​ 構成については、製品の展開ごとに1つのストアを使用することを強くお勧めします。そうすれば、どこを調べてどこを変更するかを常に正確に把握できるからです。 すべてのWebサービス参照(WCFまたはそれ以外)は、ランタイム提供の文字列を使用して構築および呼び出すことができます…​ :)

キーの値をキャッシュするという点では、スタックのオーバーヘッドが管理可能であるため、メモリキャッシュ(独自のアプリケーション用)で独自のキャッシュを使用しています…​ memcacheのようなものがここで動作する可能性があります(設定ストアはTCP /ネットワーク上のどこかでアクセスされます)…​

編集:

public class ConfigurationStore
{
    private static ConfigurationStore _instance = null;

    public static ConfigurationStore Instance {
        get {
        if(_instance == null)
        {
            _instance = new ConfigurationStore();
        }

        return _instance;
        }
    }

    public string GetValue(string key)
    {
        ....
    }

    public Object GetObject(string key)
    {
        ...
    }
}


0


構成キーを操作するためのカスタムの.netユーティリティと組み合わせた自動化用のNAntスクリプトを検討することもできます。