Windows Azure Web角色上JSON数据的HTTP压缩

Windows Azure Web角色上JSON数据的HTTP压缩,json,compression,azure,Json,Compression,Azure,我已经为我的Azure web角色正确配置了压缩。.aspx页面和*.css等静态页面都被正确压缩 <urlCompression doStaticCompression="true" doDynamicCompression="true" dynamicCompressionBeforeCache="true" /> 不过,我有几个不同的[System.Web.Services.WebMethod],它们不返回GZIP数据。每个请求的大小大约为350KB,所以我认为如果我能让

我已经为我的Azure web角色正确配置了压缩。.aspx页面和*.css等静态页面都被正确压缩

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

不过,我有几个不同的[System.Web.Services.WebMethod],它们不返回GZIP数据。每个请求的大小大约为350KB,所以我认为如果我能让它工作起来,应该会快一点

在我的webMethod中,我创建一个对象列表,返回对象,我假设某种类型的内置序列化程序将其转换为JSON

是否存在强制压缩此内容的方法?
非常感谢

我看到人们出于各种原因对内置压缩产生问题

最简单的方法是使用第三方组件(如Telerik的RadCompression)对AJAX调用的响应实施压缩

或者,您可以重写应用程序的BeginRequest方法或编写自己的处理程序 在飞行中整理响应。下面是如何执行此操作的基本VB版本:

子应用程序_BeginRequest(…)

如果Request.RawUrl.Contains(“.aspx”)和_ 而不是请求。头文件(“接受编码”)则什么都不是

If Request.Headers(“接受- 编码“.ToLower()”包含(“gzip”),然后

Response.Filter=New GZipStream(Response.Filter,CompressionMode.Compress,True) AppendHeader(“内容编码”、“gzip”)

'否则…如果不允许GZip,尝试放气

如果结束

如果结束

端接头


我也用处理程序做了一个方法(我相信Telerik的RadCompression就是这么用的),但它要复杂一些,因为你必须修改响应大小等等。

这是我最后得到的,一个Yak的答案

        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");
                    }
                }
            }
        }
HttpApplication应用程序=(HttpApplication)发送方;
HttpRequest请求=app.request;
HttpResponse response=app.response;
System.Web.HttpApplication Appl=(System.Web.HttpApplication)发送方;
HttpContext=Appl.context;
字符串origpath=context.Request.Url.AbsolutePath;
//ajaxweb服务请求总是以application/json开头
if(request.ContentType.ToLower(CultureInfo.InvariantCulture.StartsWith(“application/json”))
{
//用户可能正在使用不支持压缩的旧版本IE,请跳过这些

如果(!((request.Browser.IsBrowser(“IE”)&&(request.Browser.MajorVersion)看起来像这样,则应回答: