0

大家好,我的任务是创建一个允许最终用户将文件加载到我们的服务器之一的网络应用程序。然后服务器将处理该文件,然后将其返回给最终用户。服务器具有 IIS7 和 .net 框架 4 这是我的问题。我已经弄清楚了所有事情,只是一旦我操作后我很难从服务器中删除文件。有没有一种方法可以让我在 30 分钟后设置一个计时器,以便在我的代码中从服务器中删除文件?还是有另一种解决方案来做到这一点?我知道计时器建议可能没有意义,但是我想不出另一种方法来做到这一点,所以我正在寻找意见或其他方法。

4

4 回答 4

2

计时器是安排未来某事的好方法。如果用户再次请求文件,您甚至可以重置计时器。只需给计时器一个委托,在计时器触发时删除文件。

于 2013-05-24T19:06:24.917 回答
1

操作后为什么不删除呢?或者这个过程的最后一步是什么?这似乎是最好和最简单的方法。

根据数量,为每个文件执行单个任务可能不是一个好主意 - 您应该将它们批处理到队列中并让单个线程处理队列。

例如,您可以在 global.asax 中启动一个后台线程(可能使用 Timer)来通过比较文件时间或其他方式来处理清理任务。

或者,作为该过程的第 1 步,您可以清理任何旧文件。不完全相同,但可能足够接近。

或者,您可以滥用缓存删除回调作为计时器。

于 2013-05-24T19:26:31.097 回答
1

您可以在服务器上设置计划任务吗?

这种事情对于简单的控制台应用程序来说是完美的,它只是删除修改日期/时间早于 now.AddMinutes(-10) 的文件。

如果您也喜欢,该任务可以每 10 分钟左右运行一次。

有时最好让这类事情远离您的网站。让您的网站为您的用户服务并创建其他东西来为您的服务器服务.. :)

更新 如果它是一个流量很大的网站,您可以在下次有人上传文件时删除所有旧文件。所以:

用户选择要上传的文件,点击上传 -> 你得到文件 -> 你删除旧文件(不管它们属于谁) -> 你操作文件 -> 文件将被下一个用户上传删除...

于 2013-05-24T19:30:33.710 回答
1

如果您可以确保应用程序始终保持运行,您可以跳过计划任务并使用Quartz.NET。在这种情况下,即使使用石英关闭它也不会那么糟糕——除非在应用程序空闲时有一些旧文件挂在这不会有什么坏处。

就处理这个问题而言,我会以适当的方式(例如——您的数据库)存储一个文件列表,其中包含一个标记,以表示作业已完成以及已删除。然后,您的石英任务可以抓取标记为已完成但未标记为已删除的文件并清理它们。在文件删除和更新以及日志记录中使用事务的奖励积分,这样您就可以知道世界在睡觉时发生了什么。

于 2013-05-24T19:47:36.710 回答