0

NHibernate を使用してデータを SQL Server データベースに永続化する ASP.NET MVC アプリケーションがあります。

エントリをデータベースに保存したい場合があります (最初はコントローラーのアクション メソッドへの呼び出しによってトリガーされます) が、呼び出し元をブロックする必要はありません。

データベース呼び出しをタスクに入れ、バックグラウンドで呼び出して、コントロールが呼び出し元にすぐに戻ることができるようにする、ファイアアンドフォーゲットメカニズムをデータベースに実装しようとするのは「安全」ですか? (または、BackgroundWorker または "async/await" キーワードを使用して同じことを達成します) 要求ごとの ISession をクリーンアップしようとする ASP.NET によって NHibernate がつまずかないようにするソリューションが必要です。セッションの有効期間管理に Autofac を使用しています。データベース操作の存続期間は、Web 要求自体よりもわずかに長いと思いますが、それがどれほどスムーズに機能するかはわかりません。

4

1 に答える 1

3

これを行うのは安全ではありません。この件に関するブログ投稿があります。問題は、進行中のリクエストがない場合、AppDomain 全体が破棄される可能性があることです。また、データベースの挿入が何らかの理由で失敗した場合はどうなるか考えてみてください。早く戻った場合、クライアントにエラーを通知する方法はありません。

信頼できるソリューションでは、呼び出し元に成功を返す前に、何らかの永続的な場所にデータを保存する必要があります。これは、データベースに直接入れることも、ある種のキューに入れることもできます (後で独立したワーカーによって処理されます)。

于 2013-08-26T19:36:57.437 に答える