1

別のアプリケーション (非 Web) といくつかの共通コードを共有する MVC Web アプリケーションがあります。

両方のアプリケーションが行う必要があることの 1 つは、特定のデータ ストアに接続することです。非 Web アプリケーションは、それぞれが異なる接続パラメーターのセットで複数のスレッドを実行するため、共通コードでは、各接続が「スレッド静的」としてマークされています。したがって、この接続は ASP.NET MVC アプリケーションでもスレッド静的でなければなりません。

私の Web アプリケーションでは、HttpModule. はcontext_BeginRequest接続を開き、 は接続をbegin_EndRequest閉じます。(接続は 30 秒後にデータストアによって自動的に閉じられるため、無期限に開いたままにすることはできません)。

私の Web アプリケーションは、接続を使用できないというエラーが時々発生することを除けば、問題なく動作しているようです。

ロギングを追加してこれを調査しました。context_BeginRequest、 、context_EndRequestおよび例外がスローされたときに、各スレッドをログに記録しました。エラーは、アプリケーション内のHttpModule's context_BeginRequest. それがヒットしなかったため、接続は開かれませんでした。

私の理解では、スレッドはヒットする必要がありましたHttpModule-では、なぜそうではないのですか?

この動作を保証できない場合、どのようなアプローチを提案しますか?

4

1 に答える 1

0

これはおそらく、アプリケーションのどこかで非同期コードを使用しているためです。

非同期コードは、それを呼び出したコードと同じスレッドで実行されることが保証されていないコールバック メカニズムを使用します。

スレッド同期コンテキストを渡すか、単に接続自体をパラメーターとして Async 関数に渡すことができます

于 2013-03-07T17:20:29.140 に答える