我一直在尝试在 Windows Azure 托管的 WCF Restful 服务上启用 gzip HTTP 压缩,但未成功,该服务仅从 GET 和 POST 请求返回 JSON。
我已经尝试了很多事情,我很难列出所有这些,现在我意识到我一直在处理相互冲突的信息(关于旧版本的 azure 等),所以我认为最好从头开始!
我正在使用 Visual Studio 2008,使用 Visual Studio 2010 年 2 月的工具。
所以,根据以下link ..
.. HTTP 压缩现已启用。我已经使用了下一页的建议(仅 URL 压缩建议)..
http://blog.smarx.com/posts/iis-compression-in-windows-azure
<urlCompression doStaticCompression="true"
doDynamicCompression="true"
dynamicCompressionBeforeCache="true"
/>
..但我没有得到压缩。我不知道url压缩和http压缩之间的区别并没有帮助。我试图找出答案,但没有成功!
Visual Studio 工具是在支持压缩的 Azure 版本之前发布的,这会是一个问题吗?我在某处读到,使用最新的工具,您可以在发布时选择要使用的 Azure 操作系统版本...但我不知道这是否属实,如果是,我找不到在哪里来选择。我可以使用预先启用 http 的版本吗?
我也尝试过blowery http压缩模块,但没有结果。
有人对如何实现这一目标有任何最新建议吗?即与当前版本的 Azure 操作系统相关的建议。
干杯!
史蒂文
更新:我编辑了上面的代码来修复 web.config 代码段中的类型。
更新 2: 使用下面答案中显示的 Whatsmyip URL 测试响应表明,我的 service.svc 的 JSON 响应在没有任何压缩的情况下返回,但返回的是静态 HTML 页面 正在通过 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
..就是这样!完毕!这可以对 web 角色返回的 json 进行动态压缩,我认为我在某处读到的该角色有一个相当奇怪的 mime 类型,因此请确保准确复制代码。
https://stackoverflow.com/questions/2775261/