5

关于动态存储临时图像并在 Web 服务器的文件系统上处理它们的清理的主题:(在 .NET 3.5 中使用 C#)。

有人建议我使用global.asax文件来处理这个问题。

我只是无法弄清楚这件事是如何运作的。

我有两个单独的应用程序...

我发现 global.asax 应该在网站的根目录中。

问题:

1)我如何global.asax只为这两个特定的应用程序触发。

2)两个应用程序都需要创建一个字符串列表(文件位置),然后在应用程序终止时删除它们。我是在应用程序中还是在global.asax?

我的代码将如下所示:

List<string> fileLocations = new List<string>();  
//I don't know where to put this.

//The next line of code will be in both applications (this could 
//be called many times in one application session.  The names of 
//the files are generated from the clock (milliseconds and 
//seconds combined, I might change this to use the actual 
//random class combined with sessionID)
fileLocations.Add(file);

void Application_End(object sender, EventArgs e) 
{
    //  Code that runs on application shutdown
    foreach(string file in fileLocations)
    {
        if(File.Exists(file))
            File.Delete(file);
    }    
}

我对 global.asax 的实际工作方式感到困惑。它像接口一样使用吗?

4

2 回答 2

3

了解如何使用 Global.asax 的一个好地方是阅读ASP.NET Quickstart on it's usage。每个 Web 应用程序/站点都有一个。这有点像全球级别的事件。

请注意,在大多数服务器上,Application_End 事件不会经常触发。它只会在 IIS 应用程序池被卸载/回收、web.config 修改、/Bin 中的程序集更改或网络服务器停止的其他情况下触发。在一个受欢迎的网站上,您的活动可能需要数周、数月才能触发。

于 2009-08-06T18:42:47.157 回答
2

MSDN LinkWikipedia Link是开始的地方。

它不像接口那样使用,更像是一个过滤器,它有一堆不同的钩子,用于启动应用程序对象或会话或请求。Wikipedia 链接有一个 Global.asax 可以进行的调用列表,尽管我建议退一步了解 Web 应用程序与桌面应用程序相比如何结束。IIS 可以回收 AppPool 作为结束应用程序的一种方式,尽管还有其他方式,因此如果该事件永远不会触发,则在应用程序端设置清理可能不是最好的主意。

于 2009-08-06T18:22:16.573 回答