代码改变世界

[Silverlight]实战WCF RIA gzip压缩

2012-04-03 16:21  slmk  阅读(1663)  评论(4编辑  收藏  举报

本文利用IIS7的“动态内容压缩”,实现WCF RIA输出的内容压缩后发送到客户端浏览器。测试环境:Win7+IIS7.5;网络监视工具:Fiddler2 (用Firebug也可)。

测试代码:

web端:

[EnableClientAccess()]
public class StringService : DomainService
{
public string GetString()
{
return File.ReadAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "app_data/string.txt"));
}
}

silverlight端:

private void Button_Click(object sender, RoutedEventArgs e)
{
sc.GetString(io =>
{
tbString.Text = io.Value.Length.ToString();
},null);
}

代码很简单,Domain Service的Invoke方法GetString从文本文件string.txt中读取全部文本,输出一个很长的String,由silverlight端获取此字符串。

将应用程序发布到IIS后,运行如图:(注意将应用程序的身份验证方式,只保留匿名验证,其他都禁用)

实战步骤:

1、使用Fiddler2截获请求,作为实战前的对照:

可以看出WCF Ria返回的内容类型是:application/msbin1

2、安装“动态内容压缩”:

以win7为例:

3、对appliction/msbin1类型启用压缩:

安装完后,打开inetmgr后发现:

 

动态内容压缩已经启用:

但这并不代表所有内容类型,都会启用压缩。打开“c:\Windows\System32\inetsrv\config\applicationHost.config”文件,添加如红色下划线的部分:

<add mimeType="application/msbin1" enabled="true" />

重启站点。

4、重新运行应用程序,用Fiddler2观察:

可以看到输出的内容压缩到了原来的1/18,gzip压缩确实很给力。

注意:

微软提示:使用动态内容压缩可能会提高cpu的使用率并降低服务器的总体性能。建议在局部范围内使用,具体情况具体分析了。