2011-10-18 1 views
1

私たちはDependency InjectionにSpring.NETを使用し、ORMとしてNHibernateを使用しています。 Session Per Request Modelを使用し、セッションはSpring.NETを使用して作成されます。このページの1つでは、Webサービス呼び出しがあります。 WebサービスコールがEndPointNotFoundException例外をスローすると、NHセッションが閉じられ、 'Lazy Initialization exception:'が遅れてロールのコレクションを初期化できませんでした。セッションもセッションも閉じられませんでした。ページの読み込みが行われますが、Personオブジェクトにはアドレスなどの遅延ロードされたコレクションが設定されています。遅延ロードされたコレクションの1つがアクセスされるとエラーがスローされます)。例外がスローされない場合、すべて正常に動作します。迅速な解決策はありますか?EndPointNotFoundExceptionが発生したときにNHibernateセッション(リクエストごとのセッション)が閉じられるWCFコール例外がスローされた場合、これを修正するにはどうすればよいですか?

+0

ISessionを閉じましたか? –

+0

:)それは私が把握しようとしているものです。例外がスローされると、「no sessionまたはsession was closed」というエラーが表示されます。 – RAM

+0

クイックソリューションは、「ビューから照会しない」であり、dbレイヤーに必要なオブジェクトを熱心にロードします。 http://nhprof.com/learn/alerts/QueriesFromViews – Andreas

答えて

0

詳しい情報が必要ですが、私は、計算された推測を行うようにするよ:

スローされた例外が処理されない、または取り扱う場合が再スローされます。 例外はページエラーハンドラに伝播します。

どちらか一方の方法どこかの例外バブルパイプラインに沿って例外ハンドラがISession.Close()を呼び出し、例外を消費(したがって、プログラムの実行は、ページのレンダリングを経由して続けて)

これは珍しいことではありませんし、通常のロールバックを行うときその取引もISessionを閉じることをお勧めします。

失敗したコミットでロールバック+クローズが実行される可能性があります。この場合、失敗したWebサービス呼び出しが何らかの理由でオブジェクト状態を汚染し、コミットが失敗します。再び例外は処理され、消費されます。

核心ザラザラの詳細はまだ、プロキシNHibernateはエンティティが含まれているいくつかのコードパスを実行するために取得し、参照しようということであるNHセッションは、Webサービスのエラーで閉じますんなぜ

関連する問題