2015-04-07 76 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