大家好我已经被赋予了创建一个Web应用程序的任务,该应用程序允许最终用户将文件加载到我们的服务器之一。然后,服务器将操作该文件,然后将其返回给最终用户。服务器具有IIS7和.net框架4 这是我的问题。 我已经弄明白了,除了我操作时我很难从服务器上删除文件。有没有办法让我可以在30分钟后让计时器说我的代码中从服务器中删除了文件?还是有其他解决办法吗? 我知道计时器的建议可能没有意义,但我想不出另一种方法,所以我正在寻找一个意见或其他方法。
答案 0 :(得分:2)
计时器是一种在将来安排某些事情的好方法。如果用户再次请求文件,您甚至可以重置计时器。只需给定时器一个委托,当定时器触发时删除该文件。
答案 1 :(得分:1)
操作后为什么不删除它?或者无论过程的最后一步是什么?这似乎是最好和最简单的方法。
根据数量,为每个文件执行单个任务可能不是一个好主意 - 而是应该将它们分批到队列中并让一个线程处理队列。
例如,您可以在global.asax(可能是spin up a background thread)using a Timer中通过比较文件时间等来处理清理任务。
或者,作为流程的第1步,您可以清除所有旧文件。不完全一样,但可能足够接近。
或者,您可以abuse将缓存remove callback作为计时器。
答案 2 :(得分:1)
您是否可以在服务器上设置计划任务?
这种事情非常适合简单的控制台应用程序,该应用程序只删除修改日期/时间的文件,例如now.AddMinutes(-10)。
如果您愿意,任务可以每10分钟左右运行一次。
有时最好将这类内容远离您的网站。让您的网站为您的用户提供服务并创建其他内容以服务您的服务器.. :)
<强>更新强> 如果它是一个流量很大的站点,您可以在下次有人上传文件时删除所有旧文件。 所以:
用户选择要上传的文件,点击上传 - &gt;你得到文件 - &gt;您 删除旧文件(无论他们属于谁) - &gt;你操纵 文件 - &gt;下次用户上传时将删除该文件...
答案 3 :(得分:1)
如果您可以确保应用始终保持运行,则可以跳过预定任务并使用Quartz.NET。在这种情况下,即使它使用石英关闭也不会那么糟糕 - 除非在应用程序闲置时有一些旧文件闲置的其他东西不会受到伤害。
在处理此问题时,我会以适当的方式(例如 - 您的数据库)存储一个文件列表,其中包含作业完成和删除的标记。然后,您的石英任务可以获取标记为已完成但未标记为已删除的文件并清除它们。使用文件周围事务的加值点会删除,更新和记录,以便您知道世界正在睡觉时发生了什么。