【发布时间】:2013-05-28 19:52:11
【问题描述】:
我在 ASP.NET 中有一个IHttpHandler,它提供一些图像。处理程序通过以下方式设置 ETAG:
context.Response.AddFileDependency(filename);
context.Response.Cache.SetLastModifiedFromFileDependencies();
context.Response.Cache.SetETagFromFileDependencies();
context.Response.Cache.SetCacheability(HttpCacheability.Public);
context.Response.Cache.SetMaxAge(new TimeSpan(999,0,0,0));
context.Response.Cache.SetSlidingExpiration(true);
context.Response.Cache.SetValidUntilExpires(true);
context.Response.Cache.VaryByParams["*"] = true;
byte[] buffer = File.ReadAllBytes(filename);
context.Response.ContentType = MimeMapping.GetMimeMapping(mi.Mi_filename);
context.Response.StatusCode = 200;
context.Response.BinaryWrite(buffer);
有时会在 IIS7 下得到一个 System.Web.HttpException 异常,上面写着:
无法从依赖项生成 etag。其中一个依赖项无法生成唯一 ID。
但我无法重现该问题(我知道我无法使用 ASP.NET 内部测试 Web 服务器对此进行测试)。有没有人知道为什么会发生这种情况以及我能做些什么来防止这种情况发生?
【问题讨论】:
-
我遇到了同样的问题 - 你有没有想过这个问题?
-
经过一番研究,我已经确定当文件依赖项是新创建的文件时会发生这种情况。我正在做与您完全相同的事情-生成图像。我生成一个新图像(写入硬盘),然后添加依赖项并告诉它从依赖项生成一个 etag。如果该文件以前存在,它可以正常工作,但如果该文件是作为当前请求的一部分生成的,我会得到
System.Web.HttpException。就像依赖管理器认为该文件不存在,即使它肯定确实存在(我先检查File.Exists())