我一直试图在我的Windows Azure托管的WCF Restful服务上启用gzip HTTP压缩失败,该服务仅从GET和POST请求返回JSON。
我已经尝试了很多东西,因此我很难列出所有这些东西,现在我意识到我一直在处理相互冲突的信息(关于旧版本的azure等),所以认为最好从一个干净的石板开始!
我正在使用Visual Studio 2008,使用2010年2月的Visual Studio工具。
<urlCompression doStaticCompression="true"
doDynamicCompression="true"
dynamicCompressionBeforeCache="true"
/>
但我没有得到压缩。这并没有帮助,我不知道urlCompression和httpCompression之间有什么不同。
可以,事实上Visual Studio的工具是在支持压缩的Azure版本之前发布的,会是一个问题吗?我已经阅读过某些地方,使用最新的工具,可以选择在发布时要使用的Azure操作系统版本......但我不知道这是否正确。我可以使用预先启用http的版本吗?
发布于 2018-04-19 10:40:06
编辑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启用了动态压缩
发布于 2018-04-19 11:30:14
问题是MIME类型不匹配。WCF返回JSON响应Content-Type: application/json; charset=UTF-8
。大约在该页面一半处的默认IIS配置不包括作为可压缩MIME类型。
现在,可能会向<httpCompression>
web.config中添加一个节,并添加application / json。只能<httpCompression>
在applicationHost.config级别更改元素。
所以有两种可能的解决方案。首先,可以将WCF响应更改为使用默认配置中可压缩的MIME类型。text/json
将工作,所以添加到服务方法(S)会给你动态压缩:WebOperationContext.Current.OutgoingResponse.ContentType = "text/json";
或者,可以使用appcmd和启动任务更改applicationHost.config文件。这是讨论(除其他事项)在这个线程。请注意,如果添加该启动任务并在开发结构中运行它,它将会运行一次。第二次它会失败,因为你已经添加了配置元素。我最终创建了另一个具有单独csdef文件的云项目,以便我的devfabric不会运行该启动脚本。可能还有其他解决方案。
https://stackoverflow.com/questions/-100008185
复制相似问题