2010-12-17 27 views
0

したがって、appSettingsはapp.config、web.config、machine、config ...で設定できます。ただし、IIS 7で作業する場合は、applicationHost.configの下にappSettingsを適用して、サイト固有の設定を行うこともできます。だから、私はAppSettingsを使用する必要があるかどうかを知るための一貫した方法は何ですか?applicationHost.configを説明するAppSettingsを取得する一貫した方法は何ですか?

これがクライアントプロファイルの場合、System.Configuration.ConfigurationManagerは問題ありません。 System.Web.Configuration.WebConfigurationManagerこれがweb-appの場合は...まあ、おそらく。 Microsoft.Web.Administration applicationHosting.config - ouch ...の値を期待していても、階層化されていないので、そのプロセスを保持しているようです。

誰でもapplicationHost.configを考慮したAppSettingsの処理に一貫したアプローチがありますか?

答えて

1

ファイルに実際に<appSettings>を指定することはできません。これは、applicationHost.configがIIS固有の設定しか定義していないためです。あなたがapplicationHost.configを編集し、サイトまたは<location path="...">セクションの下<appSetting>セクションを追加しようとするとエラー(IIS月を取得します

%systemroot%\System32\inetsrv\config\schema\IIS_schema.xml

:あなたはこれを確認するapplicationHost.configスキーマを確認することができます開始せず、IIS MMCコンソールに構成エラーが表示されます)。

IISマネージャーでグローバルアプリケーション設定を構成した場合、これはIISのデフォルト.NET Frameworkバージョン設定と一致するマスターweb.configファイルで実際に構成されます。

<appSettings/>は、.NET Frameworkに固有のものであり、のみで構成することができます。

 
%SYSTEMROOT%\Microsoft.NET\Framework\[framework version]\CONFIG\machine.config 
%SYSTEMROOT%\Microsoft.NET\Framework\[framework version]\CONFIG\web.config 
%SYSTEMROOT%\Microsoft.NET\Framework64\[framework version]\CONFIG\machine.config 
%SYSTEMROOT%\Microsoft.NET\Framework64\[framework version]\CONFIG\web.config 

そしてもちろん、アプリケーションのapp.configweb.configファイル。

私のアドバイスは、まれに世界的に利用可能な値が必要な場合を除いて、これらの設定をアプリケーションのローカルに保つことです。

更新:今、私はあなたの問題を理解することを

- これにアプローチする方法があります - あなたは同じ物理フォルダへのすべてのポイントは、複数のIISサイトを持っています。

HTTP_HOST値のプライマリキーを持つ構成テーブルをデータベースに持つことができます。あなたのweb.config

 
Host    SitePrefix 
====    ====== 
domain1.com  D001 
domain2.com  D002 

:これは、例えば、接頭辞にマップGlobal.asax.csでアプリケーションのApplication_Startイベントで

は、アプリケーション全体の値を初期化:

void Application_Start(object sender, EventArgs e) 
{ 
    // Code that runs on application startup 
    string httpHost = HttpContext.Current.Request.ServerVariables["HTTP_HOST"]; 
    Application["SitePrefix"] = GetSiteKeyFromDb(httpHost); 
} 

この値はアプリケーション全体で利用できますが、サイト固有の値です。

あなたはサイトに固有の設定を読み込む必要があります。

string siteSetting = ConfigurationManager.AppSettings[ 
    HttpContext.Current.Application["SitePrefix"] + "_Setting1" 
]; 

をしかし、あなたはApplication_Startにデータベースをヒットしている場合、実際にこれらのすべてのサイト固有の設定を保存するために好都合することができますデータベースを読み取り、の代わりにApplicationにキャッシュしてください。

+0

おそらく正しいでしょう... をその場所に置いても何のエラーもありませんでした。具体的には、単一の物理パスを使用して複数の仮想ホストをホストすることと関連があります。短くて不幸な答えは、あなたのコードを再利用できるかもしれないが、あなたはまだ1つの設定を残していて、あなたはHTTP_HOSTから答えを出さなければならないということです。私はホスト固有の設定を処理するためのコードを書くのを避けようとしていました。ああ、生きて学ぶ。 – Ajaxx

+0

@ajaxx - 複数の仮想ホストがあるとすると、複数のホストヘッダーを持つ単一のサイトまたは同じ物理フォルダを指す複数のサイトを意味しますか? – Kev

+0

同じ物理ホスト上の複数のサイトが、すべて同じ物理フォルダーを指しています。これはasp.netサイトであり、ほとんどすべてがデータ駆動型です。配備されたリソースを複製する理由はありません。唯一の注意点は、サイトベースの設定が可能になることを期待していたことです。代わりに物理パス(web.config)に基づいています。サーバー変数に依存していくつかの重要な決定を行うことで、その問題を回避するだけです。 – Ajaxx

0

これを達成するためにAnti-Santaの答えで提供された情報を使用しましたが、URLを解析して情報を検索する別のデータベースを持っていませんでした。同じコードベースがオンプレミスで使用されています。

appSettingslocationノードの.NET Framework web.configに追加するだけです。 %SYSTEMROOT%\Microsoft.NET\Framework64\[framework version]\Config\web.config

、追加する場所Site1Site2が同じ物理ディレクトリを指す私の二つのアプリケーション、次のとおりです

<?xml version="1.0" encoding="utf-8"?> 
<!-- the root web configuration file --> 
<configuration> 

    <!-- App settings for the different applications --> 
    <location path="Default Web Site/Site1"> 
     <appSettings> 
      <add key="ConnectionString" value="the cnn str"/> 
     </appSettings> 
    </location> 
    <location path="Default Web Site/Site2"> 
     <appSettings> 
      <add key="ConnectionString" value="the cnn str"/> 
     </appSettings> 
    </location> 

... 

</configuration> 

物理フォルダ内web.configので私もからそれを削除するために必要なこのappSettingを上書きしますそのファイル。

関連する問題