0

Web アプリケーションに MVC4、C#、Castle Windsor、fluentnhibernate スタックを使用していますが、これは一般的に非常にうまく機能します。

次の行に沿って nHibernate 何かに関連するエラーが発生するのは、たまにしかありません。

リーダーが閉じているときに Read を呼び出す試みは無効です。

また

内部接続の致命的なエラーです。

これは通常、非常に近い間隔で複数の呼び出しを行うと、醜い頭をもたげます。

現在、JQueryから複数のajax getを実行しながら複製しています。

問題があると思われるのは、私の NHibernate セッション管理にあります。

私が考えることができる唯一のことは、呼び出しは同じセッションを使用している誰かであり、最初の呼び出しが完了して閉じ、次の呼び出しが完了できないということです。

セッションが次のように処理される方法のため、これは不可能です。

Kernel.Register(
                Component.For<ISessionFactory>()
                                .UsingFactoryMethod(_ => config.BuildSessionFactory()),
                Component.For<ISession>()
                                .UsingFactoryMethod(k => k.Resolve<ISessionFactory>().OpenSession())
                                .LifestylePerWebRequest());

リクエストごとに 1 つのセッションにする必要がありますか?

他にどのように、またはどこで問題を探すことができますか? 私はかなり立ち往生しています。

4

1 に答える 1

0

もちろん、これは数分後に解決しましたが、答えは私にとって目を見張るものでした.

この答えは私を正しい道に導きました。

すべてのリポジトリ、マネージャー、およびその他のレイヤーは、Castle Windsor を使用して正しいライフスタイルでインストールされましたが、そうでないものもありました。

ActionFilter からリポジトリ呼び出しを行っていました。アクション フィルターはすべて、Singleton として誤って登録された ActionInvoker クラスを介して呼び出され、エラーが発生しました。

container.Register(Component.For<IActionInvoker>()
                                    .ImplementedBy<WindsorActionInvoker>()
                                    .LifeStyle.***Singleton***);

当然のはず

container.Register(Component.For<IActionInvoker>()
                                    .ImplementedBy<WindsorActionInvoker>()
                                    .LifeStyle.Transient);

これらのライフスタイルに細心の注意を払うためのもう 1 つのリマインダーです。

于 2012-11-23T03:04:33.530 に答える