我已经为我的Azure Web角色正确配置了压缩。 .aspx页面和* .css等静态页面都被正确压缩。
<urlCompression doStaticCompression="true" doDynamicCompression="true" dynamicCompressionBeforeCache="true" />
我有几个不同的[System.Web.Services.WebMethod],但是没有返回GZIP的数据。每个请求的大小大约是350KB,所以我认为如果能让它工作起来应该会快得多。
在我的webMethod中,我创建一个对象列表,返回对象,并假设某种类型的内置序列化器将其转换为JSON?
是否有强迫此内容被压缩? 非常感谢!
答案 0 :(得分:0)
我看到人们因内置多种原因而遇到内置压缩问题
最简单的方法是使用第三方组件(如Telerik的RadCompression)对AJAX调用的响应强制执行压缩。
或者,您可以覆盖应用程序的BeginRequest方法或编写自己的处理程序 即时收拾回复。如何执行此操作的基本VB版本在此处:
Sub Application_BeginRequest(...)
如果Request.RawUrl.Contains(“。aspx”)和_ 不是Request.Headers(“接受编码”)是什么然后
如果Request.Headers(“接受 - 编码“)。ToLower()。包含(”gzip“)然后
Response.Filter = New GZipStream(Response.Filter,CompressionMode.Compress,True) Response.AppendHeader(“Content-encoding”,“gzip”)
'否则......如果不允许GZip,则尝试放气
结束如果
结束如果
End Sub
我已经使用处理程序完成了一个方法(这就是我相信Telerik的RadCompression使用的方法),但是由于你必须修改响应大小等,它会变得更复杂。
答案 1 :(得分:0)
这就是我最终得到的结果,是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");
}
}
}
}