IIS7 gzip压缩 - httpCompression部分

问题描述:

我试图在IIS7配置httpCompression。通过谷歌搜索,我发现它可以在配置中使用httpCompression部分。这个问题,我不能让它从web.config工作。IIS7 gzip压缩 - httpCompression部分

当我做出applicationHost.config一切配置工作需要,但我希望能够使每个应用程序,而不是全局此配置。

我改变了applicationHost.config节定义<section name="httpCompression" overrideModeDefault="Allow" />和移动httpCompression部分的web.config:

<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files"> 
     <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" /> 
     <staticTypes> 
     <add mimeType="text/*" enabled="true" /> 
     <add mimeType="message/*" enabled="true" /> 
     <add mimeType="application/x-javascript" enabled="true" /> 
     <add mimeType="application/atom+xml" enabled="true" /> 
     <add mimeType="application/xaml+xml" enabled="true" /> 
     <add mimeType="*/*" enabled="false" /> 
     </staticTypes> 
     <dynamicTypes> 
     <add mimeType="text/*" enabled="true" /> 
     <add mimeType="message/*" enabled="true" /> 
     <add mimeType="application/x-javascript" enabled="true" /> 
     <add mimeType="application/json" enabled="true" /> 
     <add mimeType="application/json; charset=utf-8" enabled="true" /> 
     <add mimeType="*/*" enabled="false" /> 
     </dynamicTypes> 
    </httpCompression> 

我缺少什么?它看起来像IIS不从web.config读取压缩配置。

每次更改之后,我让应用程序池回收,所以它不是一个问题。

您应检查整个config file hierarchy

如果您从applicationHost中删除该部分,则可能从machine.configweb.config继承父目录。

+2

我找到了解决办法。我修改区段定义中的applicationHost.config从,以(allowDefinition的= “无处不在”解决了这个问题)。谢谢 – 2013-03-18 11:54:51

+0

@AlexDn:我想你应该把你的解决方案作为实际的答案。 – sharptooth 2013-11-07 14:44:20

+0

@sharptooth其实我只能在IIS服务器级别配置它。没有找到每个应用程序配置的解决方案。 – 2013-11-07 17:06:36

按照此ServerFault回答:https://serverfault.com/a/125156/117212 - 您无法更改web.config中的httpCompression,它需要在applicationHost.config文件中完成。下面是我在Azure的Web角色使用修改applicationHost.config文件并添加MIME类型的压缩代码:

using (var serverManager = new ServerManager()) 
{ 
    var config = serverManager.GetApplicationHostConfiguration(); 
    var httpCompressionSection = config.GetSection("system.webServer/httpCompression"); 
    var dynamicTypesCollection = httpCompressionSection.GetCollection("dynamicTypes"); 

    Action<string> fnCheckAndAddIfMissing = mimeType => 
    { 
     if (dynamicTypesCollection.Any(x => 
     { 
      var v = x.GetAttributeValue("mimeType"); 
      if (v != null && v.ToString() == mimeType) 
      { 
       return true; 
      } 

      return false; 
     }) == false) 
     { 
      ConfigurationElement addElement = dynamicTypesCollection.CreateElement("add"); 
      addElement["mimeType"] = mimeType; 
      addElement["enabled"] = true; 
      dynamicTypesCollection.AddAt(0, addElement); 
     } 
    }; 

    fnCheckAndAddIfMissing("application/json"); 
    fnCheckAndAddIfMissing("application/json; charset=utf-8"); 

    serverManager.CommitChanges(); 
} 

ServerManager来自Microsoft.Web.Administration包的NuGet。