在Windows Azure Web Role上对JSON数据进行HTTP压缩

4 浏览
0 Comments

在Windows Azure Web Role上对JSON数据进行HTTP压缩

我已经正确配置了我的Azure Web角色的压缩功能。无论是.aspx页面还是*.css这样的静态页面,都能正确压缩。


然而,我有几个[System.Web.Services.WebMethod],它们没有返回经过GZIP压缩的数据。每个请求的大小约为350KB,所以我认为如果能让这个功能生效,速度应该会快得多。

在我的webMethod中,我创建了一个对象列表,返回这些对象,然后我假设某种内置的序列化器将其转换为JSON格式?

有没有办法强制对这些内容进行压缩?

非常感谢!

0
0 Comments

问题出现的原因是因为在Windows Azure Web Role上的HTTP请求中,需要对JSON数据进行压缩,以提高数据传输的效率和性能。

解决方法是通过在HTTP请求处理过程中添加压缩逻辑。首先,检查请求的内容类型是否为"application/json"。然后,判断浏览器是否支持压缩,通过检查请求头中的"Accept-Encoding"字段。如果浏览器支持gzip压缩,则将响应的Filter属性设置为GZipStream类型,并添加"Content-encoding"头,并且选择gzip压缩模式。如果浏览器支持deflate压缩,则将响应的Filter属性设置为DeflateStream类型,并添加"Content-encoding"头,并选择deflate压缩模式。

以上是解决方法的具体代码实现。通过这样的处理,可以在Windows Azure Web Role上实现对JSON数据的压缩,提高数据传输的效率和性能。

0
0 Comments

问题的原因是人们在使用内置的压缩功能时遇到了各种问题。解决方法之一是使用第三方组件,如Telerik的RadCompression,来强制对AJAX调用的响应进行压缩。另一种方法是重写应用程序的BeginRequest方法或编写自己的处理程序来实时压缩响应。以下是一个基本的VB版本示例:

Sub Application_BeginRequest(...)
If Request.RawUrl.Contains(".aspx") And _
Not Request.Headers("Accept-Encoding") Is Nothing Then
If Request.Headers("Accept-encoding").ToLower().Contains("gzip") Then
Response.Filter = New GZipStream(Response.Filter, CompressionMode.Compress, True)
Response.AppendHeader("Content-encoding", "gzip")
' Else...attempt deflate if GZip is not allowed
End If
End If
End Sub

我还使用处理程序实现了一种方法(我认为Telerik的RadCompression也是使用这种方法),但它更加复杂,因为你必须修改响应的大小等。

0