通过 ARR 模块处理磁盘缓存上的锁定。如何在不回收应用程序池的情况下释放它?

通过 ARR 模块处理磁盘缓存上的锁定。如何在不回收应用程序池的情况下释放它?

我在目录 c:\arrCache_media\video 中找到了缓存磁盘文件。IIS 仍然拥有该文件的句柄,因此我无法重命名、删除或重写该文件。但我可以将该文件移动到另一个文件夹,因此我尝试通过这种方式来解决我的问题。

在此处输入图片描述

我将文件 entcadieux1.wmv.full 移至名为 Trash 的另一个文件夹,路径为 c:\Trash。当我移动文件时,IIS 仍可获取该文件的句柄。如果您查看进程监视器 IIS 的屏幕截图,现在可获取垃圾目录中的文件。

在此处输入图片描述

如果我删除该文件,iis 会将该文件放入系统垃圾文件夹中。

在此处输入图片描述在此处输入图片描述

我的问题是,ARR 缓存系统将文件锁定在缓存文件夹中是不正常的。我可以在读取模式下打开文件。因此,他的逻辑可能是在写入过程之后释放文件上的句柄。在这种情况下,我认为问题可以解决。可以手动或通过代码删除该文件,然后 iis 将在 Web 场服务器上发送请求。 我知道如果我回收应用程序池,iis 将释放句柄,但我不想释放应用程序池,因为这将影响超过 200 个站点

答案1

我只是有可能解决了我的问题。经过几个小时的测试、代码和所有测试,都没有成功。测试显示,ARR 的主缓存将保持对控制器文件的“锁定”,使其存在。但是,二级缓存更加宽松(幸运的是),它允许我们删除没有它们的文件,它被 IIS“锁定”。所以可以说我完全删除了服务器 ARR 上的主缓存,只留下二级缓存。到目前为止,测试是成功的。

相关内容