2015-04-07 75 views
1

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

因此,在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 

然后,也许在HomeControl的Index()方法LER,我用在Global.asax提供的数据库连接:

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

共享变量是...跨请求共享。这意味着两个并发请求将践踏其他每个连接。这是你可能会观察到的。

将连接存储在HttpContext.Items中。

+1

哇 - 感谢您的快速响应!这个窍门! – niewi