3

我试图httpCompression在 IIS7 上进行配置。通过谷歌搜索,我发现它可以使用httpCompression配置中的部分进行。问题是,我无法通过 web.config 使其工作。

当我在所有内容中进行配置时,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 读取压缩配置。

每次更改后,我都会使应用程序池回收,所以这不是问题。

4

2 回答 2

6

根据此 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.AdministrationNuGet 中的包。

于 2013-12-12T19:13:01.783 回答
3

您应该检查整个配置文件层次结构

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

于 2013-03-18T11:42:40.340 回答