小编典典

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

json

我一直在尝试在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" 
/>

..但我没有压缩。我不知道 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响应小于此响应,如以下注释中所述。不幸的是,响应仍未压缩。


阅读 245

收藏
2020-07-27

共1个答案

小编典典

嗯,这花了 长时间……但是我终于解决了这个问题,我想将答案发布给其他苦苦挣扎的人。解决方案非常简单,我已经证实它确实可以正常工作!!

编辑您的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类型很奇怪,因此请确保您完全复制了代码。

2020-07-27