我一直在尝试在Windows Azure托管的WCF Restful服务上启用gzip HTTP压缩失败,该服务仅从GET和POST请求返回JSON。
我已经尝试了很多事情,以至于很难列出所有这些东西,现在我意识到我一直在处理有冲突的信息(关于天蓝色的旧版本等),所以认为最好从一开始就开始!
我正在使用Visual Studio 2008,使用Visual Studio的2010年2月工具。
因此,根据以下链接 ..
.. HTTP压缩现已启用。我在下一页使用了建议(仅URL压缩建议)。
http://blog.smarx.com/posts/iis-compression-in-windows- azure
<urlCompression doStaticCompression="true" doDynamicCompression="true" dynamicCompressionBeforeCache="true" />
..但我没有压缩。我不知道 urlCompression 和 httpCompression有 什么区别是没有帮助的。我试图找出答案,但无济于事!
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响应小于此响应,如以下注释中所述。不幸的是,响应仍未压缩。
嗯,这花了 很 长时间……但是我终于解决了这个问题,我想将答案发布给其他苦苦挣扎的人。解决方案非常简单,我已经证实它确实可以正常工作!!
编辑您的ServiceDefinition.csdef文件以在WebRole标记中包含此文件:
<Startup> <Task commandLine="EnableCompression.cmd" executionContext="elevated" taskType="simple"></Task> </Startup>
在您的网络角色中,创建一个文本文件并将其另存为“ 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
..就是这样!做完了!这可以对网络角色返回的json进行动态压缩,我认为我在某个地方读到的MIME类型很奇怪,因此请确保您完全复制了代码。