我有一个 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://{服务器}/{应用程序}/trunk/RetrieveBlob.aspx?assetId=31809&assetFileId=11829
答案1
<caching>
您在 web.config 中启用的标签是system.web
.net 特定的,IIS 7 不会处理该缓存内容。现在,您<caching>
已配置的system.webServer
由 IIS 7 模块处理,应该可以正常工作。
如果您希望为特定页面(例如 RetrieveBlob.aspx)启用缓存,则需要将其添加到<location>
标签下,例如:
<location path="RetrieveBlob.aspx">
<system.webServer>
<caching>
<profiles>
<add extension=".aspx" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" duration="00:00:30" varyByQueryString="assetId, assetFileId" />
</profiles>
</caching>
</system.webServer>
</location>
最简单的方法是使用 IIS 7 UI。这是我的博客,其中讨论了IIS 7 中的文件级别身份验证,但您可以对输出缓存执行相同的操作。
前往网站(本例中为默认网站)
单击内容视图
右键单击文件,例如检索Blob.aspx->切换到功能视图
双击输出缓存
现在,点击添加...并进行必要的缓存更改