Application_BeginRequest没有为缓存结果触发?

时间:2015-04-07 09:40:10

标签: asp.net asp.net-mvc caching global-asax

我正在使用IIS 7.5作为Web服务器编写ASP.NET MVC应用程序。 我想在任何请求开始时打开数据库连接,并在请求结束时关闭此连接。

因此,在global.asax中我指定了成员

Public Shared conn As OleDbConnection

在Application_BeginRequest处理程序中,我打开如下连接:

Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
   Dim strConn As String = "myConnectionString..."
   conn = New OleDbConnection(strConn)
   conn.Open()
End Sub 'Application_BeginRequest

在Application_EndRequest处理程序中,我关闭它:

Sub Application_EndRequest(ByVal sender As Object, ByVal e As EventArgs)
   conn.Close()
   conn.Dispose()
End Sub 'Application_EndRequest

然后,也许在HomeController的Index()方法中,我使用了global.asax提供的Db连接:

Dim _conn As OleDbConnection = MvcApplication.conn
'[then get or set data in the DB...]

我现在遇到一个奇怪的事情:当我从服务器完全重新加载页面时,数据库连接已正确打开。当IIS从缓存传递页面时,数据库连接不会打开,我收到错误(虽然似乎是从我的报告工具中输入了Application_BeginRequest处理程序)。有办法克服这个问题吗?我已经尝试通过HTML元标记设置缓存控制,并利用此处提供的以下Q& A:How to switch off caching for MVC requests but not for static files in IIS7? 问题仍然存在。有人可以帮忙吗? 非常感谢, niewi

1 个答案:

答案 0 :(得分:1)

共享变量......在请求之间共享。这意味着两个并发请求将践踏彼此的连接。这是你可能正在观察的内容。

将连接存储在HttpContext.Items