2011-02-17 70 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使用的),但是它有點複雜,因爲你必須修改響應大小等。