![通过 ARR 模块处理磁盘缓存上的锁定。如何在不回收应用程序池的情况下释放它?](https://linux22.com/image/575688/%E9%80%9A%E8%BF%87%20ARR%20%E6%A8%A1%E5%9D%97%E5%A4%84%E7%90%86%E7%A3%81%E7%9B%98%E7%BC%93%E5%AD%98%E4%B8%8A%E7%9A%84%E9%94%81%E5%AE%9A%E3%80%82%E5%A6%82%E4%BD%95%E5%9C%A8%E4%B8%8D%E5%9B%9E%E6%94%B6%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E6%B1%A0%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E9%87%8A%E6%94%BE%E5%AE%83%EF%BC%9F.png)
我在目录 c:\arrCache_media\video 中找到了缓存磁盘文件。IIS 仍然拥有该文件的句柄,因此我无法重命名、删除或重写该文件。但我可以将该文件移动到另一个文件夹,因此我尝试通过这种方式来解决我的问题。
我将文件 entcadieux1.wmv.full 移至名为 Trash 的另一个文件夹,路径为 c:\Trash。当我移动文件时,IIS 仍可获取该文件的句柄。如果您查看进程监视器 IIS 的屏幕截图,现在可获取垃圾目录中的文件。
如果我删除该文件,iis 会将该文件放入系统垃圾文件夹中。
我的问题是,ARR 缓存系统将文件锁定在缓存文件夹中是不正常的。我可以在读取模式下打开文件。因此,他的逻辑可能是在写入过程之后释放文件上的句柄。在这种情况下,我认为问题可以解决。可以手动或通过代码删除该文件,然后 iis 将在 Web 场服务器上发送请求。 我知道如果我回收应用程序池,iis 将释放句柄,但我不想释放应用程序池,因为这将影响超过 200 个站点
答案1
我只是有可能解决了我的问题。经过几个小时的测试、代码和所有测试,都没有成功。测试显示,ARR 的主缓存将保持对控制器文件的“锁定”,使其存在。但是,二级缓存更加宽松(幸运的是),它允许我们删除没有它们的文件,它被 IIS“锁定”。所以可以说我完全删除了服务器 ARR 上的主缓存,只留下二级缓存。到目前为止,测试是成功的。