28

我目前正在使用 Microsoft.Web.Administration (MWA) 命名空间,以调整我们的应用程序以使用新 API 配置 IIS 7.5。我知道所有 IIS 级别的更改都应该在以下文件中表示(我在 Win2K8-R2 上):

%WINDIR%\System32\inetsrv\config\applicationHost.config

因此,当我使用ServerManager对象提交配置更改时,文件应相应更新。

添加新的 MIME 类型(使用 MWA 编程)后,我没有看到任何更改applicationHost.config file,但我确实在 IIS 管理器窗口中看到了新的 MIME 类型,并且 IIS 可以毫无问题地识别此 MIME 类型。即使重新启动操作系统 - 配置文件不包含新添加的 MIME 类型,但 IIS 管理器窗口确实列出了它。

因为我的应用程序池被强制为 32 位(Enable32BitAppOnWin64 = true),我认为相关的配置文件应该位于下%WINDIR%\SysWOW64\inetsrv\Config,但是(如果它存在......) - 在代码提交更新后它也不会改变。

有人可以解释一下吗?我是否遗漏了什么(可能是查看了错误的文件?)?有人可以对SysWOW64\inetsrv\config目录有所了解吗?

这是我添加 MIME 类型的代码:

ServerManager manager = new ServerManager();
ConfigurationElementCollection staticContentCollection = manager
    .GetApplicationHostConfiguration()
    .GetSection("system.webServer/staticContent")
    .GetCollection();

//MIMETypes is a string[] array, each object is {FileExt},{MIMETypeStr}
foreach (string pair in MIMETypes)
{
    string[] mimeProps = pair.Split(',');

    ConfigurationElement mimeTypeEl = staticContentCollection
          .Where(a => 
                   (string)a.Attributes["fileExtension"].Value == mimeProps[0])
          .FirstOrDefault();


    if (mimeTypeEl != null)
    {
        staticContentCollection.Remove(mimeTypeEl);
    }

    ConfigurationElement mimeMapElement = 
                  staticContentCollection.CreateElement("mimeMap");

    mimeMapElement["fileExtension"] = mimeProps[0];
    mimeMapElement["mimeType"] = mimeProps[1];

    staticContentCollection.Add(mimeMapElement);
}

manager.CommitChanges();

//At this point all is working but the config file does not reflect the change
4

2 回答 2

25

我刚试过你的代码,它工作正常。您是否知道此 mime 类型被添加到全局 mime 类型集合而不是站点?

它也被添加到列表的末尾,<staticContent>当您这样做时,此列表不会重新排序ServerManager.CommitChanges()

同样在 Windows 2008-R2 上,正确的位置applicationHost.config是:

C:\Windows\System32\inetsrv\config

我猜你要么使用 notepad.exe 要么 NotePad2 打开这个文件(32位编辑器无法打开它)。记事本不会在更改后重新加载文件,并且需要告诉 NotePad2 显示文件更改通知 (alt-F5),开箱即用不会。

还可以尝试添加一些不寻常.xxx的东西,例如运行更新,然后打开配置文件并进行搜索。我保证它会在那里。

更新:

除了您在下面的评论之外,我不确定您如何applicationHost.config使用 NotePad++ 或任何 32 位编辑器打开,我当然不能。你能下载64位编辑器NotePad2吗:

http://www.flos-freeware.ch/notepad2.html

发布候选版工作得很好。

applicationHost.config在任何 64 位 Windows 2008 或 Windows 7 的默认安装中,C:\Windows\SysWOW64\inetsrv\Config文件夹中不应有。我不确定你为什么会在那里看到一个。

于 2011-04-18T00:14:49.980 回答
3

作为使用您最喜欢的 64 位兼容的 32 位编辑器(即 Notepad++)打开和编辑 64 位 IIS 配置文件的解决方法,您可以创建一个指向C:\Windows\System32\inetsrv\Config. 使用此方法,您将替换32 位Config目录,该目录位于C:\Windows\SysWOW64\inetsrv\Config指向 64 位版本。例如,如果您有一个需要 32 位和 64 位版本的应用程序,则此方法将不起作用。

有关更多信息,我强烈建议您访问此 MSDN 博客

于 2013-07-11T14:19:24.037 回答