我有一个 RetrieveBlob.aspx,它获取一些查询字符串变量并返回一个资产。每个 url 对应一个独特的资产。
在 RetrieveBlob.aspx 中设置了缓存配置文件。在 Web.Config 中,配置文件看起来像(在 system.web 标签下:
<caching>
<outputCache enableOutputCache="true" />
<outputCacheSettings>
<outputCacheProfiles>
<add duration="14800" enabled="true" varyByParam="*"
name="AssetCacheProfile" />
</outputCacheProfiles>
</outputCacheSettings>
</caching>
好的,这很好用。当我在 RetrieveBlob.aspx 后面的代码中放置断点时,它会在第一次触发,而其他所有时间都不会触发。
现在,我丢弃了缓存配置文件,而是在 System.WebServer 下的 Web.Config 中拥有它:
<caching>
<profiles>
<add extension=".swf" policy="CacheForTimePeriod"
kernelCachePolicy="CacheForTimePeriod" duration="00:08:00" />
<add extension=".flv" policy="CacheForTimePeriod"
kernelCachePolicy="CacheForTimePeriod" duration="00:08:00" />
<add extension=".gif" policy="CacheForTimePeriod"
kernelCachePolicy="CacheForTimePeriod" duration="00:08:00" />
<add extension=".png" policy="CacheForTimePeriod"
kernelCachePolicy="CacheForTimePeriod" duration="00:08:00" />
<add extension=".mp3" policy="CacheForTimePeriod"
kernelCachePolicy="CacheForTimePeriod" duration="00:08:00" />
<add extension=".jpeg" policy="CacheForTimePeriod"
kernelCachePolicy="CacheForTimePeriod" duration="00:08:00" />
<add extension=".jpg" policy="CacheForTimePeriod"
kernelCachePolicy="CacheForTimePeriod" duration="00:08:00" />
</profiles>
</caching>
现在缓存不再起作用了。我究竟做错了什么?是否可以在 System.WebServer 的缓存标记下配置动态 aspx 页面的缓存配置文件?
我已经尝试添加这样的内容:
<add extension="RetrieveBlob.aspx" policy="CacheForTimePeriod"
kernelCachePolicy="CacheForTimePeriod" duration="00:00:30"
varyByQueryString="assetId, assetFileId" />
但它不起作用。
一个 url 的例子是:
http://{server}/{application}/trunk/RetrieveBlob.aspx?assetId=31809&assetFileId=11829
<caching>
您在 web.config 中启用的标记system.web
是 .net 特定的,IIS 7 不会处理该缓存内容。现在,<caching>
您已配置的system.webServer
内容由 IIS 7 模块处理并且应该可以工作。如果您希望为特定页面(如 RetrieveBlob.aspx)启用缓存,则需要将其添加到
<location>
标记下,例如:使用 IIS 7 UI 完成此操作的最简单方法。这是我的博客,其中讨论了IIS 7 中的文件级身份验证,但您可以对输出缓存执行相同的操作。
转到网站(在我们的例子中为默认网站)
单击内容视图
右键单击文件,例如RetrieveBlob.aspx ->切换到功能视图
现在 双击输出缓存
,单击添加...并进行必要的缓存更改