Caching 从命令行或Powershell脚本中删除ARR缓存中的所有缓存对象

Caching 从命令行或Powershell脚本中删除ARR缓存中的所有缓存对象,caching,iis-7,proxy,Caching,Iis 7,Proxy,文档描述了如何使用IIS管理器的应用程序请求路由缓存小程序删除所有缓存对象(详细信息如下:)。如何从命令行或powershell脚本执行此操作 在我的情况下,我有一个本地磁盘缓存,删除该文件夹中的文件不会导致重新计算文件。还需要什么?我能想到的最佳选择是从提升的命令提示符调用iisreset.exe,然后删除缓存文件夹的内容,例如: iisreset cd d:\cache FOR /R %d IN (.) DO rmdir /s /q "%d" 这有点难看——肯定有更优雅的东西。下面的C代码

文档描述了如何使用IIS管理器的应用程序请求路由缓存小程序删除所有缓存对象(详细信息如下:)。如何从命令行或powershell脚本执行此操作


在我的情况下,我有一个本地磁盘缓存,删除该文件夹中的文件不会导致重新计算文件。还需要什么?

我能想到的最佳选择是从提升的命令提示符调用iisreset.exe,然后删除缓存文件夹的内容,例如:

iisreset
cd d:\cache
FOR /R %d IN (.) DO rmdir /s /q "%d"
这有点难看——肯定有更优雅的东西。

下面的C代码示例是一个简单的控制台程序,可以删除缓存的所有内容,或者删除您希望从缓存中清除的特定URL

为了进行编译,您需要引用我在GAC中找到的Microsoft.Web.Administration DLL(尽管我也相信它也是Windows SDK的一部分)


希望这有帮助

另请参见:我遇到了随机访问拒绝错误(大多数情况下都有效)。你也经历过同样的事情吗?我们的服务器上也发生过这种情况。在我们的例子中,有两个应用程序池正在运行。缓存清除请求由两者处理。一个有权限访问该文件夹,另一个没有。您可以非常轻松地修复权限,但一旦修复,就会出现“未找到”错误,因为一个应用程序池将其删除,而另一个应用程序池则无法找到它。因此,最好是只运行一个应用程序池。嗯,我会尝试,因为在我的情况下,还有三个应用程序池(这是一个Azure云服务,两个是默认的)。但我不认为这是由那些应用程序池造成的:现在我认为如果我尝试(以编程方式)快速删除大量条目,就会出现拒绝访问的情况。我会看看我是否能推断出什么并返回。好的,我发现对我来说,导致访问拒绝错误的原因是有多个线程(来自不同的web API请求)同时删除缓存项。现在,如果其中一个请求试图删除已被另一个请求删除的条目,则会导致错误。我不知道为什么这会导致访问被拒绝(而不是未找到),但我会尝试调查。
using Microsoft.Web.Administration;
using System;

namespace IISCacheManager
{
  class Program
  {
    static void Main(string[] args)
    {
      if (args.Length != 1)
      {
        Console.WriteLine("Incorrect Usage: Specify the URL that you want to flush the cache for. To delete everything, specify 'ALL'.");
        Environment.Exit(1);
      }

      var url = args[0] == "ALL" ? string.Empty : args[0];

      var m = new ServerManager();
      var x = m.GetApplicationHostConfiguration().GetSection("system.webServer/diskCache");
      var method = x.Methods["FlushUrl"].CreateInstance();
      method.Input.SetAttributeValue("url", url);
      method.Execute();
      Console.WriteLine("Item flushed successfully.");
    }
  }
}