1

次のように、Application_StartイベントからFluentNHibernateを初期化しています。

Fluently.Configure()
.Database(OracleDataClientConfiguration.Oracle10
            .Driver<NHibernate.Driver.OracleDataClientDriver>()
            .ConnectionString("MyConnectionString")
            .DefaultSchema("MySchema")
        )
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<SomeClass>())
.BuildConfiguration()
.BuildSessionFactory();

接続文字列が不良であるか、他の理由でDBへの接続が失敗した場合、TNS No listener例外が発生します。この例外を表示/ログに記録したいのですが、Application_Start(およびApplicaiton_Error)にIIS7統合モードのHttpContextまたはResponseオブジェクトがありません。ユーザーは、カスタムエラーをオンにするように指示する黄色の死の画面を受け取ります。Elmahもメッセージをログに記録しません。次の2つの方法のいずれかで問題を解決したいと思います。

  1. nhibernate構成が構成時にデータベースに接続しないようにします。
  2. エラーに基づいてカスタムユーザーフィードバックを提供し、Elmahを(どういうわけか)機能させます。これが私の理想的な選択です。

ここで説明するように、NHibernate構成をSession_Startで実行するように移動できました。これにより、このエラーに対して例外処理が機能しますが、問題の根本原因に誤解を与える可能性のある他の例外が発生します。誰かがこのシナリオのための良い解決策を持っていますか?

ありがとうございました。

4

1 に答える 1

2

これが私がすることです:

void Application_Start() {
    try {
          // setup your app / nhibernate
    } catch(Exception ex) {
        Application["StartupError"] = ex
    }
}

void Application_BeginRequest() {
    var startupError = Application["StartupError"] as Exception;
    if (startupError != null)
        throw new Exception("Error starting application", startupError);
}

BeginRequest メソッドでは、リクエストにアクセスでき、エラーを表示したい (または素敵なページを表示したい) ことができます。

于 2012-09-13T14:54:14.003 に答える