Duwamish深く分析-配置編

9775 ワード

要約:
本文はDuwamishネット上の電子書店のWebを詳しく紹介した.configプロファイルの構造処理方式および用途について,プロファイルの各機能モジュールにおける役割を述べた.
目次:
引用する
セクションハンドラ宣言の構成
カスタム構成セクション
セクションハンドラの構成
まとめ
参考資料
作成者
引用:
ほとんどの本でAspを紹介しています.Netプログラミングの本では、データベース接続文字列をどのように管理するかについて、データベース接続文字列を次のようにWebに置く.Configファイル:
ppSettings>
dd key="ConnectionString"value="data source=localhost;initial catalog=Database;user id=;password="/>

次に、次の方法でプログラムにアクセスします.
System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]
このような利点は明らかである:データベースに変動がある場合、webを変えるだけである.configの接続文字列は、アプリケーション全体を再コンパイルする必要がなく、アプリケーションの導入と移植に非常に便利です.
Webだと思ったらconfigの役割はこれに限ると、あなたは間違っています.web.コンフィギュレーション機能は非常に強力で、独自のXMLコンフィギュレーションタグ拡張規格のASPをサポートすることができます.NET配置設定セットは、Duwamishにおいてその機能をある程度体現しており、以下ではDuwamishのwebを詳しく分析する.configファイルは、典型的な開発を知ることができます.Net WEBアプリケーションの構成技術.
セクションハンドラ宣言の構成
Duwamishソリューションでは、Web.configファイルはWEBプロジェクトの下に置くので、web.configにはIISとAspが必要である.Net Runtimeの管理とサポートは、仮想ディレクトリの下に置く必要があります.まず、その第1部を見てみましょう.




ここでは3つのコンフィギュレーション・セクション・ハンドラ宣言(Section)を定義し、コンフィギュレーション・ファイルの上部にあるタグの間に表示する必要があることを規定します.ここではnameとtype属性のみが使用されます.ここで、name属性は指定されたプロビジョニング・セクションの名前を定義し、type属性はコンフィギュレーション・ファイルからセクションを読み出すコンフィギュレーション・セクション・ハンドラ・クラスを指定する名前を規定し、2つの部分があります.前はプロセッサのクラス名、後はAssembly名(Assemblyはbinディレクトリに存在する必要があります)、バージョン番号、スプーンなどの情報です.
彼らは具体的にどういう意味ですか.例えば最初のsectionはAspに伝えるという意味ですNetシステムは、プログラムでSystemを使用する.Configuration.ConfigurationSettings.GetConfig("ApplicationConfiguration")という静的メソッドでApplicationConfigurationコンフィギュレーションセクションを読み込むとDuwamish 7が呼び出される.SystemFramework.アプリケーションコンフィギュレーションというクラスは、このコンフィギュレーション・セクションを処理します.コンフィギュレーション・セクションの処理クラスについては、後で詳しく説明します.まずwebを見てみましょう.configファイル.
カスタム構成セクション
ノードの後に、以下のXML要素が表示されます(system.webノードに関する説明はすでに多くの記事で紹介されていますが、ここでは繰り返しません).
pplicationConfiguration>

dd key="SystemFramework.Tracing.Enabled"value="False"/>

dd key="SystemFramework.Tracing.TraceFile"value="DuwamishTrace.txt"/>

dd key="SystemFramework.Tracing.TraceLevel"value="4"/>

dd key="SystemFramework.Tracing.SwitchName"value="DuwamishTraceSwitch"/>

dd key="SystemFramework.Tracing.SwitchDescription"value="Error and information tracing for Duwamish"/>

dd key="SystemFramework.EventLog.Enabled"value="True"/>
dd key="SystemFramework.EventLog.Machine"value="."/>
dd key="SystemFramework.EventLog.SourceName"value="Duwamish7"/>

dd key="SystemFramework.EventLog.LogLevel"value="1"/>



dd key="Duwamish.DataAccess.ConnectionString"value="server=LUYAN\NetSDK;User ID=Duwamish7_login;Password=password;database=Duwamish7;Connection Reset=FALSE"/>
dd key="Duwamish.Web.EnablePageCache"value="True"/>
dd key="Duwamish.Web.PageCacheExpiresInSeconds"value="3600"/>
dd key="Duwamish.Web.EnableSsl"value="False"/>



dd key="."value=""/>
dd key="modules"value=""/>
dd key="..\common\data"value=""/>
dd key="..\systemframework"value=""/>
dd key="..\business\facade"value=""/>
dd key="..\business\rules"value=""/>
dd key="..\dataaccess"value=""/>
dd key="secure"value=""/>
dd key="docs\common"value=""/>
dd key="docs\dataaccess"value=""/>
dd key="docs\facade"value=""/>
dd key="docs\rules"value=""/>
dd key="docs\web"value=""/>

コンフィギュレーション・セクション情報は、コンフィギュレーション・ハンドラ宣言領域とコンフィギュレーション・セクション設定領域の2つのメイン領域に分けられます.ここでは、先ほど定義した3つのsectionのコンフィギュレーション・セクション設定領域です.実際のコンフィギュレーション設定が含まれています.その用途の説明は、「コメント」を参照してください.すべてのコンフィギュレーション情報は、ルートXMLタグの間に存在する必要があります.コンフィギュレーション・セクション設定領域は領域
セクションハンドラの構成
先に説明したように、sectionでは処理構成節のクラス:Duwamish 7が定義されている.SystemFramework.ApplicationConfigurationとDuwamish 7.Common.DuwamishConfiguration、彼らはそれぞれSystemFrameworkとCommonプロジェクトに位置しています.Netは、コンフィギュレーション・セクションを処理できるすべてのクラスがIConfigurationSectionHandlerインタフェースを実装する必要があることを規定しているが、IConfigurationSectionHandlerインタフェースは簡単で、object Create(object parent,object configContext,XmlNode section)メソッドが1つしかない.GetConfigという静的メソッドの場合に自動的に呼び出されます.つまり、プログラムでConfiguration Settingsを使用すると、GetConfigがコンフィギュレーション・セクションを取得するとき、.Netは、コンフィギュレーション・セクション宣言で定義されたクラス名とパスに基づいて、コンフィギュレーション・セクション処理クラスを自動的にインスタンス化し、Createメソッドを呼び出します.次はDuwamishの処理クラス呼び出しプロセスです.
1、global.asaxのApplication_OnStartメソッドでアプリケーションコンフィギュレーションを呼び出します.OnApplicationStartスタティックメソッドを使用して、アプリケーションルートの絶対パスを取得します.
    void Application_OnStart()
    {
      ApplicationConfiguration.OnApplicationStart(Context.Server.MapPath( Context.Request.ApplicationPath));
      string configPath = Path.Combine(Context.Server.MapPath( Context.Request.ApplicationPath ),
      "remotingclient.cfg");
      if(File.Exists(configPath))
		RemotingConfiguration.Configure(configPath);
    }

2、ApplicationConfiguration.OnApplicationStartスタティックメソッドでSystemを呼び出します.Configuration.ConfigurationSettings.GetConfigメソッド処理構成セクション:
        public static void OnApplicationStart(String myAppPath)
        {
            appRoot = myAppPath;
            System.Configuration.ConfigurationSettings.GetConfig("ApplicationConfiguration");
            System.Configuration.ConfigurationSettings.GetConfig("DuwamishConfiguration");
            System.Configuration.ConfigurationSettings.GetConfig("SourceViewer");
        }
DuwamishはGetConfigから返される値を取得していないことに気づきました.前述したようにGetConfigメソッドはコンフィギュレーション・セクション・ハンドラのCreateメソッドを引き起こすので、Createメソッドでコンフィギュレーション値を取り出すだけでいいのです.
3、構成読取例:Duwamish 7.Common.DuwamishConfigurationクラス
public Object Create(Object parent, object configContext, XmlNode section)
{
    
    NameValueCollection settings;
    
    try
    {
	NameValueSectionHandler baseHandler = new NameValueSectionHandler();
        settings = (NameValueCollection)baseHandler.Create(parent, configContext, section);
    }
    catch
    {
        settings = null;
    }
    
    if ( settings == null )
    {
        dbConnectionString        = DATAACCESS_CONNECTIONSTRING_DEFAULT;
        pageCacheExpiresInSeconds = WEB_PAGECACHEEXPIRESINSECONDS_DEFAULT;
        enablePageCache           = WEB_ENABLEPAGECACHE_DEFAULT;
        enableSsl                 = WEB_ENABLESSL_DEFAULT;
    }
    else
    {
        dbConnectionString = ApplicationConfiguration.ReadSetting(settings,
		 DATAACCESS_CONNECTIONSTRING, DATAACCESS_CONNECTIONSTRING_DEFAULT);
        pageCacheExpiresInSeconds = 
		ApplicationConfiguration.ReadSetting(settings, WEB_PAGECACHEEXPIRESINSECONDS, 
		WEB_PAGECACHEEXPIRESINSECONDS_DEFAULT);
        enablePageCache = ApplicationConfiguration.ReadSetting(settings, WEB_ENABLEPAGECACHE,
		WEB_ENABLEPAGECACHE_DEFAULT);
        enableSsl = ApplicationConfiguration.ReadSetting(settings, WEB_ENABLESSL, WEB_ENABLESSL_DEFAULT);
    }
    
    return settings;
}
ここで、Duwamishは実際に自分でXmlNodeからデータを読み込むのではなく、NameValueSectionHandlerに直接データを転送して実際の構成読み取りを行い、自分の仕事は実際に定義された構成値があるかどうかをチェックするだけで、ない場合はデフォルト値に割り当てられます.
まとめ:
これで、web.コンフィギュレーションクラスの静的変数にconfigのコンフィギュレーション値が読み出され、以降、コンフィギュレーションクラスの静的変数をプログラムの他の場所で使用してコンフィギュレーション値に直接アクセスすることができ、例えば、プログラムのどこでもDuwamish 7を入力.Common.DuwamishConfiguration.ConnectionsStringで入手可能:server=LUYANNetSDK;User ID=Duwamish7_login;Password=password;database=Duwamish7;Connection Reset=FALSEという文字列.さらに理想的には、自分の構成セクションと構成セクションハンドラを拡張して、複雑なカスタム構成を前処理することができます.
参考資料:
ASP.NET構成
ms-help://MS.VSCC/MS.MSDNVS.2052/cpguide/html/cpconaspnetconfiguration.htm
プロファイルアーキテクチャ
ms-help://MS.NETFrameworkSDK.CHS/cpgenref/html/gngrfnetframeworkconfigurationfileschema.htm