有没有办法从ASP.NET访问IIS内核缓存?

前端之家收集整理的这篇文章主要介绍了有没有办法从ASP.NET访问IIS内核缓存?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这只清除用户缓存中的项目:
public static void ClearCache()
    {
        foreach (DictionaryEntry entry in HttpRuntime.Cache)
        {
            HttpRuntime.Cache.Remove(entry.Key.ToString());
        }
    }

有没有办法访问内核缓存?

澄清:我想打印内核缓存中所有项的键,作为奖励,我希望能够从C#方法中清除内核缓存.

解决方法

是的,可以通过编程方式枚举和删除IIS内核缓存中的项目.

注意事项:

>需要枚举的非平凡文本解析
>删除需要大量丑陋的P / Invoke
>此外,您至少需要中等信任(可能还有完全信任)才能完成以下任务.
>删除在IIS的集成管道模式下不起作用.
>枚举可能不适用于IIS6

列举:

我知道枚举IIS内核缓存的唯一记录方式是IIS7及更高版本中可用的命令行应用程序(尽管您可以将NETSH帮助程序DLL从V7复制到V6系统 – 尚未尝试过).

netsh http show cachestate

有关详细信息,请参见MSDN Documentation of the show cachestate command.您可以通过执行该过程并解析文本结果将其转换为“API”.

Big Caveat:我从未见过这个命令行应用实际上在我的服务器上返回任何内容,即使是在经典模式下运行的应用程序.不知道为什么 – 但应用程序确实有效,因为我可以在网上看到其他帖子. (例如http://chrison.net/ViewingTheKernelCache.aspx)

如果你对进程创建非常过敏并且有野心勃勃,那么NETSH命令是由带有文档化的Win32接口的DLL实现的,因此你可以编写假装它的NETSH.exe并直接调用IIS的NETSH助手DLL的代码.您可以使用documentation on MSDN作为此方法的起点.警告:模拟NETSH是非常困难的,因为接口是双向的:NETSH调用DLL并且DLL调用回NETSH.而且你仍然需要解析文本输出,因为NETSH接口是基于文本的,而不是基于对象的,如PowerShell或WMI.如果是我,我只会产生一个NETSH流程.

猜你在找的asp.Net相关文章