快速业务通道

IIS 7.0: 使用集成的ASP.NET管道增强应用程序

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-19
许缓 存响应(请参见图 11)。请注意 AddFileDependency 调用。在省略的代码中,我确定图库目录和图像的 物理路径(如果已指定),并在响应中添加文件依赖关系。这采用输出缓存支持的 CacheDependency 机 制,用以监视这些资源的变化,当资源被修改时使缓存的响应无效。这样可以使缓存的响应保留很长时间 ,只有当底层数据更改时才使它无效。当有人放入新图像或创建新的子图库时,缓存功能会自动删除受影 响的缓存响应,任何新请求都会得到更新的页面。

Figure 11 Configuring the Response to be Cached

public void OnPostRequestHandlerExecute(Object source, EventArgs e)
{
HttpApplication app = (HttpApplication)source;
HttpContext context = app.Context;
// Make sure we only process requests to QDIG''s index.php.
String requestPath = context.Request.Path;
if (!requestPath.Equals(VirtualPathUtility.ToAbsolute
("~/index.php")))
return;
// Enable this response to be output cached
context.Response.Cache.SetCacheability(HttpCacheability.Public);
context.Response.Cache.SetExpires(DateTime.Now +
TimeSpan.FromMinutes(5));
// code omitted for clarity ...
// add the dependencies to the response
context.Response.AddFileDependency(physicalDirectoryPath);
context.Response.AddFileDependency(physicalFileName);
}

CacheDependency 机制是一个功能强大的抽象,可用来创建您自己的、可监视任何种类底层数据的 CacheDependency 实现,例如,调用 Web 服务或检查注册表项。内置的 CacheDependency 实现包含对监 视文件、目录和 SQL Server 数据库表的支持。

部署和测试

我部署最后一个模块的方法与前面采用的方法相同,就是将模块的源文件 QdigOutputCache.cs 放到 App_Code 目录中,并在 web.config 中注册该模块:

<system.webServer>
<modules>
...
<!-- Let the OutputCache module run for all requests -->
<remove name="OutputCacheModule" />
<add name="OutputCacheModule" type=
"System.Web.Caching.OutputCacheModule" />
<!-- Add the custom output caching module -->
<add name="QdigOutputCacheModule" type=
"QdigModules.QdigOutputCacheModule" />
</modules>
</system.webServer>

除了添加 QdigOutputCacheModule,我还重新添加了 OutputCacheModule,目的是删除其 managedHandler 先决条件,这与我之前针对表单身份验证的做法相同。这样可以使 ASP.NET OutputCacheModule 在发生对 PHP 内容的请求时运行,从而提供输出缓存服务。

最后,我创建了一个 global.asax 文件(请参见图 12),该文件包含 GetVaryByCustomString 的实 现,GetVaryByCustomString 这个函数允许我的模块依据验证的用户采取不同的缓存响应。这十分重要, 因为它为每个验证的用户保留各自的缓存副本,从而防止某个用户偶然获得其他用户的个性化视图。既然 Qdig 不提供个性化视图,这就不算问题,不过我还是将其作为最佳实践展示一下。

Figure 12 Global.asax Implements GetVaryByCustomString

<%@ Application 

language="C#" %>
<script runat="server" language="c#">
public override string GetVaryByCustomString(HttpContext context,
string s)
{
if ("AuthenticatedUser".Equals(s))
{
// vary by a

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号