2009-10-20 58 views
1

我有一個內部應用程序用於編輯磁盤上的XML文件。 XML文件被加載到存儲在ApplicationState中的對象模型中。在ASP.Net(MVC)中保存ApplicationState的內容

我需要保存這些數據。每當用戶更改一些數據時,一個選項就是這樣做。但是,這看起來效率不高 - 每次進行更改時都會將數據寫入磁盤。

相反,只要用戶關閉瀏覽器,再加上Web服務器退出之前,是否可以通知?因此,數據會在每次會話結束時保存,加上計算機關閉時等。我認爲Global.asax中的Application_End(),Application_Error()和Session_End()會提供這個,但這些方法不會似乎被稱爲。

回答

0

Session_End應該被調用。

您正在運行的是哪個版本的IIS,還是您在Visual Studio開發服務器中託管?

步驟獲得Session_End中火:

  1. 在VS創建一個新的網站2008

  2. 編輯web.config文件:

    添加<sessionState mode="InProc" cookieless="true" timeout="1"/><system.web>

  3. 添加一個Global.asax文件,其代碼如下所示。

    void Session_End(object sender, EventArgs e)

    {

    Console.WriteLine("Session_End");

    }

  4. 坐落在Console.WriteLine調用一個斷點。

  5. 按F5鍵,看到在IE或Firefox中加載頁面。

  6. 等待1分鐘左右。

  7. 斷點應該在IDE中以紅色突出顯示。

+0

注意,使用的是InProc會話管理時Session_End中才會被調用,並不會在所有的呼籲,如果因任何原因重新啓動應用程序,所以是不是所有的可靠。 – 2009-10-20 17:51:33

+0

如果應用程序重新啓動,您可能有機會執行Application_End方法中的保存。 – Liam 2009-10-20 17:55:08

+0

正如Zhaph指出的: 只有在Web.config文件中將sessionstate模式設置爲InProc時,纔會引發Session_End事件。 如果會話模式設置爲StateServer或SQLServer,則不會引發該事件。 – Liam 2009-10-20 17:56:34