2013-01-08 51 views
3

我们正在使用.net framework 4.0开发一个asp.net站点。并且我们试图为它输入缓存。
但不幸的是,它没有奏效。后来我们发现删除Microsoft安全更新KB2656351将解决问题。
我想知道有没有其他方式可以做到这一点,而无需删除更新。输出缓存不工作.net4.0

+1

我没有遇到4.0的问题,请问您可以发布您的配置吗? – Nexus23

+0

安装后发生的Microsoft安全更新KB2656351 –

回答

1

只有当您安装上述提及更新并且响应中有一个cookie时,此问题才存在。无论Cookie是否包含在请求中。找到解决此问题的解决方法。我创建了一个自定义的HTTPModule,并将所有可用的cookie从响应(包括新添加的cookie)复制到Context.Items。然后清除响应中可用的所有Cookie。

在下一步中,读取存储在Context.items中的对象并将其添加回响应。所以当输出缓存提供者试图缓存页面时,响应中没有cookie。所以它照常运作。然后再添加cookies。

public void Init(HttpApplication context) 
    { 
     context.PostReleaseRequestState += new EventHandler(OnPostReleaseRequestState); 
     context.PostUpdateRequestCache += new EventHandler(OnPostUpdateRequestCache); 
    } 

    public void OnPostReleaseRequestState(Object source, EventArgs e) 
    { 
     HttpApplication application = (HttpApplication)source; 
     HttpContext context = application.Context; 
     HttpCookieCollection cookieCollection = new HttpCookieCollection(); 
     foreach (string item in context.Response.Cookies) 
     { 
      HttpCookie tempCookie = context.Response.Cookies[item]; 

      HttpCookie cookie = new HttpCookie(tempCookie.Name) { Value = tempCookie.Value, Expires = tempCookie.Expires, Domain = tempCookie.Domain, Path = tempCookie.Path }; 
      cookieCollection.Add(cookie); 
     } 
     context.Items["cookieCollection"] = cookieCollection; 
     context.Response.Cookies.Clear(); 
    } 

    public void OnPostUpdateRequestCache(Object source, EventArgs e) 
    { 
     HttpApplication application = (HttpApplication)source; 
     HttpContext context = application.Context; 
     HttpCookieCollection cookieCollection = (HttpCookieCollection)context.Items["cookieCollection"]; 
     if (cookieCollection != null) 
     { 
      foreach (string item in cookieCollection) 
      { 
       context.Response.Cookies.Add(cookieCollection[item]); 
      } 
     } 
    } 
0

对于此更新,报告有一些问题here,并且修复.net Framework 4工作。这可能是因为.net Framework的损坏或者安装了框架和IIS的顺序,它们会注销ASP.Net,所以我们需要专门注册ASP.Net,这有时会导致这些问题。

我建议修复.Net框架,并注册ASP.Net分开看看是否有效。

+1

我不这么认为,因为如果我删除所有的cookie,它的工作完美。 –