3

ELMAHを既存の ASP.NET アプリケーションに統合して、エラーの調査をさらにサポートすることを検討しており、接続文字列の助けを借りることができます。アプリケーションが展開されているすべての環境または環境に対して単一の web.config ファイルを使用し、実行時に、アプリは通常、URL に基づいて、どの環境にあるかを決定します。

これは、標準ブロックが私たちに望んでいることです...

  <connectionStrings>
    <add name="TESTAppDB" connectionString="Data Source=SQL-T-APPNAME.COMPANY.COM;Initial Catalog=APPNAME;User ID=USER;Password=THEPASS" providerName="System.Data.SqlClient"/>
    <add name="CERTAppDB" connectionString="Data Source=SQL-C-APPNAME.COMPANY.COM;Initial Catalog=APPNAME;User ID=USER;Password=THEPASS" providerName="System.Data.SqlClient"/>
    <add name="PRODAppDB" connectionString="Data Source=SQL-P-APPNAME.COMPANY.COM;Initial Catalog=APPNAME;User ID=USER;Password=THEPASS" providerName="System.Data.SqlClient"/>
  </connectionStrings>

Elmah では、接続文字列の名前を指定するだけでよいように見えますが、これを実行時に動的に指定するにはどうすればよいでしょうか? たとえば、私がテストしている場合、これが必要です:

<elmah>
     <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="TESTAppDB"/>
</elmah>

しかし、私がPRODにいる場合:

<elmah>
     <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="PRODAppDB"/>
</elmah>

編集
Web アプリケーションの展開方法は、私がやろうとしていることの範囲外です。ELMAH Sql エラー ログのデータソースを変更できるコード ソリューションが必要です...

今日の Web アプリのデプロイ方法を変更することはできません。つまり、TEST にあるものは何でも CERT に移動します。CERT にあるものは PROD に移動します。Web アプリは、それがどの環境にあるかを判断し、そのように実行できる必要があります...

4

5 に答える 5

4

これにはWebデプロイメントプロジェクトを使用します。構成ごとに接続文字列を含むファイルを指定できます(デフォルトではデバッグとリリース)。このようにして、すべてのデプロイメントのすべての構成ファイルが同じファイルを持ち、web.configがデプロイメントごとに適切に更新されます。

スコット・グーはここに良い情報を持っています:http ://weblogs.asp.net/scottgu/archive/2005/11/06/429723.aspx

これは以前のリリース用ですが、情報は引き続き適用されます。

于 2009-05-18T18:17:26.053 に答える
4

Elmah はオープンソースなので、独自のものを追加するのは簡単です :-)

必要な作業は、SqlErrorLog使用する接続文字列を含む新しい静的プロパティをクラスに追加することだけでした。次に、SqlErrorLog.ConnectionStringプロパティを更新して、値がある場合はカスタム接続文字列を返します。

クラスに次のようなものを追加してみてください (警告 - テストされていないコード):

public static string CustomConnectionString { get; set; }

public virtual string ConnectionString
{
  get 
  { 
    if (string.IsNullOrEmpty(CustomConnectionString)) 
    {
      return _connectionString;
    }
    else
    {
      return CustomConnectionString; 
    }
  }
}

これで十分です。あとは、接続文字列を選択した場所を見つけて更新し、SqlErrorLog.CustomConnectionStringプロパティも設定するだけです。

于 2009-05-18T18:42:54.753 に答える
0

この場合、データベース コンテキストを使用できますか?

MVC 3 に webapp があり、データベース コンテキストを使用してデータベースに接続します (上記の例によると)。

using (var ctx = new TESTAppDB())
{
    var res = (from p in ctx.Customer select p).FirstOrDefault();
}

TESTAppDB の場所:

public class TESTAppDB: DbContext
{
    public DbSet<Customer> Customer{ get; set; }
}

別のデータベースに接続したい場合は、次のように書きます。

using (var ctx = new CERTAppDB())
{
    var res = (from p in ctx.Order select p).FirstOrDefault();
}

正解らしい…

于 2011-11-23T13:50:39.100 に答える
0

Rune Grimstad の回答に基づいて構築するには、彼の変更に加えて、以下を追加します。

if (connectionString.Length == 0)
    connectionString = CustomConnectionString;

後:

string connectionString = ConnectionStringHelper.GetConnectionString(config);

SqlErrorLog(IDictionary config) コンストラクターで。

次に、RSolberg が行ったことを行いましたが、セッションではなく application_start で:

Elmah.SqlErrorLog.CustomConnectionString = "あなたの CS";

于 2010-06-24T21:05:45.310 に答える
0

1 つの接続文字列名 "AppDB" を使用しますが、実際には接続文字列を外部 (web.config ファイルの外部) 構成ファイルでホストします。これは環境ごとに異なります。

あなたのweb.configで:

<connectionStrings configSource="config\connectionStrings.config"/>

次に、connectionStrings.config ファイルで次のようにします。

<connectionStrings>    
    <add name="AppDB" connectionString="Data Source=SQL-T-APPNAME.COMPANY.COM;Initial Catalog=APPNAME;User ID=USER;Password=THEPASS" providerName="System.Data.SqlClient"/>
</connectionStrings>

次に、connectionStrings.config ファイルが置かれている環境に応じて、connectionString を変更します。コードでは、「AppDB」を参照してください。

于 2009-05-18T18:07:48.943 に答える