2011-02-17 72 views
0

我已经为我的Azure Web角色配置了适当的压缩。 .aspx页面和静态页面(如* .css)都被正确压缩。对Windows Azure Web角色的JSON数据进行HTTP压缩

<urlCompression doStaticCompression="true" doDynamicCompression="true" dynamicCompressionBeforeCache="true" /> 

我有几个不同的[System.Web.Services.WebMethod]的,虽然没有返回GZIP的数据。每个请求的大小大约为350KB,所以我认为如果我能够实现这个目标,应该会快得多。

在我的webMethod中,我创建了一个对象列表,返回对象,并且我假设某种类型的内置序列化器将它变成了JSON?

有没有办法强制这个内容被压缩? 非常感谢!

+0

看起来这应该回答这个问题:http://stackoverflow.com/questions/2775261/how-to-enable-gzip-http-compression-on-windows-azure-dynamic-content – 2012-02-15 21:45:23

回答

0

这就是我最终的结果,一个变体牦牛的答案。

 HttpApplication app = (HttpApplication)sender; 
     HttpRequest request = app.Request; 
     HttpResponse response = app.Response; 

     System.Web.HttpApplication Appl = (System.Web.HttpApplication)sender; 
     HttpContext context = Appl.Context; 
     string origpath = context.Request.Url.AbsolutePath; 


     //Ajax Web Service request is always starts with application/json 
     if (request.ContentType.ToLower(CultureInfo.InvariantCulture).StartsWith("application/json")) 
     { 
      //User may be using an older version of IE which does not support compression, so skip those 
      if (!((request.Browser.IsBrowser("IE")) && (request.Browser.MajorVersion <= 6))) 
      { 
       string acceptEncoding = request.Headers["Accept-Encoding"]; 

       if (!string.IsNullOrEmpty(acceptEncoding)) 
       { 
        acceptEncoding = acceptEncoding.ToLower(CultureInfo.InvariantCulture); 

        if (acceptEncoding.Contains("gzip")) 
        { 
         response.Filter = new GZipStream(response.Filter, CompressionMode.Compress); 
         response.AddHeader("Content-encoding", "gzip"); 
        } 
        else if (acceptEncoding.Contains("deflate")) 
        { 
         response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress); 
         response.AddHeader("Content-encoding", "deflate"); 
        } 
       } 
      } 
     } 
0

我见过的人有问题,与内置压缩的原因很多

最简单的方法是使用一个第三方组件,如Telerik的RadCompression执行关于应对AJAX调用压缩。

或者,您可以覆盖应用程序的BeginRequest方法或编写自己的处理程序 以便即时打包响应。如何做到这一点的一个基本VB的版本是在这里:

子的Application_BeginRequest(...)

如果Request.RawUrl.Contains(” ASPX “)和_ 不Request.Headers(” 接受 - 编码 “)是没有那么

如果Request.Headers(” 接受 - 编码 “)。ToLower将()。包含(” 压缩“)然后

Response.Filter =新GZipStream(Response.Filter,CompressionMode .Compress,True) Response.AppendHeader(“Content-encoding”,“gzip”)

“否则......试图缩小如果不允许的GZip

结束如果

结束如果

末次

我做的方法与处理程序,以及(和这就是我认为Telerik的RadCompression使用的),但是它有点复杂,因为你必须修改响应大小等。