2009-10-20 85 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