我正在开发一个框架,其中.aspx和.master页面嵌入在程序集中,使用VirtualPathProvider将URL路由到特定的嵌入式资源。
示例网址:/_framework.aspx / mypage.aspx(使用/_framework.aspx/mymaster.master)
在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,缓存实际上是好的。
答案 0 :(得分:0)
通过我在ASP.NET开发Web服务器中的工作,我得出结论,正确的FilePath将包含PathInfo,但我现在明白IIS实现是正确的。
我改变了我的代码,以便ASP.NET文件(aspx,ashx)有一个路径,例如/_framework/Default.aspx(因为这些文件将在没有特殊配置的情况下路由),主页路径如/ _framework /Site.master(因为这是在ASP.NET引擎内部路由)和图像资源的路径/_framework.ashx/image.gif(因为.ashx将被路由到ASP.NET引擎,从那里我然后将使用一种StaticFileHandler)。
这样,所有页面和资源都可以驻留并完全保留在程序集中: - )