Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用global.asax及其作用域(用于应用程序结束后的文件清理)_C#_Asp.net_File_Global Asax - Fatal编程技术网

C# 如何使用global.asax及其作用域(用于应用程序结束后的文件清理)

C# 如何使用global.asax及其作用域(用于应用程序结束后的文件清理),c#,asp.net,file,global-asax,C#,Asp.net,File,Global Asax,关于动态存储临时图像并在web服务器文件系统上处理其清理的主题:(使用.NET3.5中的C#) 有人建议我使用一个global.asax文件来处理这个问题 我就是搞不懂这是怎么回事 我有两个不同的申请 我发现global.asax应该在网站的根目录中 问题: 1) 如何使global.asax仅针对这两个特定应用程序启动 2) 两个应用程序都需要创建字符串列表(文件位置),然后在应用程序终止时删除它们。我是在应用程序中还是在global.asax中实例化此数组 我的代码如下所示: List<

关于动态存储临时图像并在web服务器文件系统上处理其清理的主题:(使用.NET3.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);
    }    
}
List fileLocations=new List();
//我不知道该把这个放在哪里。
//下一行代码将出现在两个应用程序中(这可能是
//在一个应用程序会话中被多次调用
//这些文件是根据时钟(毫秒和秒)生成的
//秒加起来,我可能会改变这个使用实际的
//随机类与sessionID组合)
fileLocations.Add(文件);
无效应用程序\u结束(对象发送方,事件参数e)
{
//应用程序关闭时运行的代码
foreach(文件位置中的字符串文件)
{
如果(File.Exists(File))
文件。删除(文件);
}    
}
我对global.asax的实际工作原理感到困惑。它是否像一个界面一样使用?

并且是开始的地方


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

了解如何使用Global.asax的一个好地方是阅读。每个web应用程序/站点都有一个。这有点类似于全局级别的事件


请注意,大多数服务器上不会经常触发应用程序结束事件。只有在卸载/回收IIS应用程序池、修改web.config、在/Bin中更改程序集或web服务器停止的其他情况下,才会触发应用程序结束事件。在流行网站上,可能需要数周或数月才能触发事件。

我阅读了这两种情况,但这些都是错误的让我更加困惑。在我看来,这些建议表明global.asax仅用于存储可从任何会话或任何应用程序访问的变量。这很有用,但不适用于我现在所做的工作。我的印象是global.asax可以创建线程来处理单个应用程序的启动d单个应用程序端。我认为您可能对ASP.Net中会话和应用程序对象的使用有误解。每个连接的用户都有一个会话,因此,如果用户a在会话对象中存储了一个变量,则除了用户a之外,任何人都无法访问该变量。相反,应用程序对象是真正的全局对象,因为我当服务器运行时,它只是其中的一个,因此在使用它时必须小心,就好像你想在应用程序对象中存储用户A的信息一样,你必须使用某种方法标记密钥,使其对该用户是唯一的。你可以在ASP.NET中的任何位置创建线程,因此没有简单的方法可以检测某人何时使用了n应用程序并运行清理脚本?我觉得这应该比现在容易多了:/n好吧,如果用户登录,那么您也可以在Global.asax中使用Session_End事件,默认情况下是20分钟,但您可以设置自己的限制。请看,啊,好的。那么,如果我在Global.asax文件中声明一个列表,它会实例化一个新的r每个用户的会话,或者我是否在我的程序中声明列表,并且global.asax以某种方式可以访问它。正如我所说,我为基本问题道歉…我通常很擅长自己解决这些问题,但出于某种原因,global.asax对我来说不是很直观。正常情况下,在程序中创建文件位置列表。PeRhap使用SessionID为每个用户创建一个唯一的文件夹,并将文件放在该文件夹中。然后,在会话结束时,您可以删除与该SessionID相关的文件夹。这有意义吗?您可能还希望在应用程序结束时有另一个作业,删除所有文件,以清除丢失的任何文件(这只会在web服务器重新启动时偶尔触发等)。哦,这现在非常有意义。哇,我从一个完全错误的角度看待它。我一直认为我必须像某种抽象类或接口一样实现它。非常感谢您的帮助!