当前位置:  开发笔记 > 编程语言 > 正文

如何在Windows Azure动态内容上启用gzip HTTP压缩

如何解决《如何在WindowsAzure动态内容上启用gzipHTTP压缩》经验,为你挑选了2个好方法。

我一直尝试在我的Windows Azure托管的WCF Restful服务上启用gzip HTTP压缩失败,该服务仅从GET和POST请求返回JSON.

我已经尝试了很多东西,我很难列出所有这些东西,我现在意识到我一直在处理相互矛盾的信息(关于旧版本的天蓝色等),所以最好从干净的石板开始吧!

我正在使用Visual Studio 2008,使用2010年2月的Visual Studio工具.

所以,根据以下链接 ..

..现在已启用HTTP压缩.我已经使用了以下页面中的建议(仅限URL压缩建议).

http://blog.smarx.com/posts/iis-compression-in-windows-azure


..但我没有压缩.我不知道urlCompressionhttpCompression之间的区别是没有用的.我试图找出但无济于事!

可能,Visual Studio的工具是在支持压缩的Azure版本之前发布的,这是一个问题吗?我已经阅读过某些地方,使用最新的工具,您可以选择在发布时使用哪个版本的Azure OS ...但我不知道这是否属实,如果是,我找不到哪里选择.我可以使用预启用http的版本吗?

我也试过了吹嘘的http压缩模块,但没有结果.

有没有人有关于如何实现这一目标的最新建议?即与当前版本的Azure OS相关的建议.

干杯!

史蒂芬

更新:我编辑了上面的代码来修复web.config片段中的类型.

更新2:测试使用下面的答案显示的URL whatsmyip的答复是表示在没有经过任何压缩正在返回从我service.svc我的JSON响应,但静态的HTML页面ARE被用gzip压缩返回.任何关于如何获得压缩的JSON响应的建议都将非常感谢!

更新3:尝试了大于256KB的JSON响应,以查看问题是否是由于JSON响应小于此,如下面的评论中所述.不幸的是,响应仍然没有被压缩.



1> Steven Ellio..:

好吧花了长时间......但我终于解决了这个问题,我想为其他任何正在挣扎的人发布答案.解决方案非常简单,我已经确认它确实有效!

编辑ServiceDefinition.csdef文件以在WebRole标记中包含此文件:

    
      
    

在您的Web角色中,创建一个文本文件并将其另存为"EnableCompression.cmd"

EnableCompression.cmd应包含以下内容:

%windir%\system32\inetsrv\appcmd set config /section:urlCompression /doDynamicCompression:True /commit:apphost
%windir%\system32\inetsrv\appcmd set config  -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/json; charset=utf-8',enabled='True']" /commit:apphost

..就是这样!完成!这为web-role返回的json启用了动态压缩,我认为我在某处读到了一个相当奇怪的mime类型,因此请确保完全复制代码.



2> Brian Reisch..:

好吧,至少我不是一个人 - 而且差不多一年之后它仍然是一个愚蠢的PITA.

问题是MIME类型不匹配.WCF返回JSON响应Content-Type: application/json; charset=UTF-8.在默认的IIS配置,大约一半的那一页,不包括为可压缩的MIME类型.

现在,可能很想在web.config中添加一个部分,并将application/json添加到该部分.但这只是浪费一两个小时的坏方法 - 你只能在applicationHost.config级别更改元素.

所以有两种可能的解决方案.首先,您可以更改WCF响应以使用默认配置中可压缩的MIME类型.text/json将工作,所以将此添加到您的服务方法将为您提供动态压缩:WebOperationContext.Current.OutgoingResponse.ContentType = "text/json";

或者,您可以使用appcmd和启动任务更改applicationHost.config文件.这个线程讨论了这个问题(以及其他内容).请注意,如果您添加该启动任务并在开发结构中运行它,它将工作一次.第二次失败,因为您已经添加了配置元素.我最终创建了第二个带有单独csdef文件的云项目,因此我的devfabric不会运行该启动脚本.可能还有其他解决方案.

更新

我对前一段中单独项目的建议并不是一个好主意.非幂等启动任务是一个非常糟糕的主意,因为有一天Azure结构将决定为您重新启动角色,启动任务将失败,并且它将进入循环循环.最有可能是在半夜.相反,如本SO线程所讨论的那样,使您的启动任务具有幂等性.

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有