【问题标题】:Application_BeginRequest not firing for cached results?Application_BeginRequest 未触发缓存结果?
【发布时间】:2015-06-11 20:46:35
【问题描述】:

我正在编写一个使用 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 元标记设置缓存控制,并利用此处提供的以下问答:How to switch off caching for MVC requests but not for static files in IIS7? 问题仍然存在。任何人都可以帮忙吗? 非常感谢, 尼维

【问题讨论】:

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


    【解决方案1】:

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

    将连接存储在HttpContext.Items

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多