我有一个 MVC Web 应用程序,它与另一个应用程序(非 Web)共享一些通用代码。
两个应用程序必须做的一件事是连接到特定的数据存储。非 Web 应用程序运行多个线程,每个线程都有一组不同的连接参数,因此公共代码将每个连接标记为“线程静态”。因此,对于我的 ASP.NET MVC 应用程序,此连接也必须是线程静态的。
在我的 Web 应用程序中,我使用HttpModule
. context_BeginRequest
打开连接并关闭begin_EndRequest
连接。(连接会在 30 秒后被数据存储区自动关闭,所以我不能无限期地保持打开状态)。
我的 Web 应用程序似乎工作得很好,只是偶尔它会抛出一个错误,说它不能使用连接。
我通过添加日志对此进行了调查。我记录了每个线程在它遇到context_BeginRequest
、context_EndRequest
和 时抛出异常。我发现该错误是由我的应用程序中的一个线程引发的,该线程从未命中HttpModule's context_BeginRequest
. 因为它没有击中那个,所以没有打开连接。
我的理解是线程应该已经击中HttpModule
- 那为什么不是呢?
如果我不能保证这种行为,那么你会建议什么方法?