我正在开发一个框架,其中 .aspx 和 .master 页面嵌入在程序集中,使用 VirtualPathProvider 将 url 路由到特定的嵌入资源。
示例 url:/_framework.aspx/mypage.aspx(使用 /_framework.aspx/mymaster.master)
- _framework.aspx 将使 IIS6 通过 ASP.NET 框架路由请求
- .aspx 之后的所有内容都被视为 .NET 框架中的 PathInfo
在 Visual Studio 2008 Web 服务器中,virtualPath 是正确的:/_framework.aspx/mypage.aspx,但在 IIS6 中,virtualPath 是:/_framework.aspx
如果我请求两个文件:/_framework.aspx/file1.css 和 /_framework.aspx/file2.css,则 file2 将具有与 file1 相同的内容。
我怀疑 IIS6 会考虑文件路径 (_framework.aspx) 并缓存从程序集返回的文件流,从而将两个 url 视为同一个文件。
临时解决方案:
我已经实现了这样的 CacheDependency 类
class ImmediateExpiryCacheDependency : System.Web.Caching.CacheDependency
{
public ImmediateExpiryCacheDependency()
{
base.NotifyDependencyChanged(null, null);
}
}
它现在使文件流缓存过期,但不适用于母版页,我猜是因为它是在缓存过期之前通过 NotifyDependencyChanged 请求的。
需要的解决方案:
如果我在 GetCacheDependency 中返回null,则 IIS6 不会立即使文件过期。立即使文件过期或完全禁用缓存的正确方法是什么。更好的是,我想纠正 IIS6 处理 url 的方式,因为缓存实际上很好,如果它使用完整的文件 url。