全局模块 <globalModules>

概述

<globalModules> 元素定义 IIS 7 服务器上安装的全局级模块。 <globalModules> 元素仅适用于服务器级别,因此在安装模块时,IIS 仅更新 ApplicationHost.config 文件。 你必须是服务器上的管理员才能安装本机模块。

IIS 7 通过本机模块实现其大部分请求处理。 使用 Service Manager 安装 IIS 7 角色服务或功能时,IIS 安装程序会向该模块的 <globalModules> 元素添加一个条目。 例如,在 IIS 7 服务器上安装基本身份验证角色服务时,安装程序会将 BasicAuthenticationModule 条目添加到 <globalModules> 元素。

安装第三方模块时,必须向该模块的 <globalModules> 元素添加一个条目。 要执行此操作,可以使用 IIS 管理器,可以手动编辑 ApplicationHost.config 文件,也可以使用 AppCmd.exe 命令行工具。

若要在应用程序中启用模块,必须编辑应用程序的 <module> 元素。

兼容性

版本 说明
IIS 10.0 <globalModules> 元素在 IIS 10.0 中未进行修改。
IIS 8.5 <globalModules> 元素在 IIS 8.5 中未进行修改。
IIS 8.0 <globalModules> 元素在 IIS 8.0 中未进行修改。
IIS 7.5 <globalModules> 元素未在 IIS 7.5 中进行修改。
IIS 7.0 <globalModules> 元素是在 IIS 7.0 中引入的。
IIS 6.0 空值

安装

<globalModules> 元素包含在 IIS 7 的默认安装中。

操作方式

如何安装本机模块

  1. 打开 Internet Information Services (IIS) 管理器:

    • 如果使用的是 Windows Server 2012 或 Windows Server 2012 R2:

      • 在任务栏上,单击“服务器管理器”,单击“工具”,然后单击“Internet Information Services (IIS)管理器”
    • 如果使用的是 Windows 8 或 Windows 8.1:

      • 按住 Windows 键,按字母 X,然后单击“控制面板”。
      • 单击“管理工具”,然后双击“Internet Information Services (IIS) 管理器”。
    • 如果使用的是 Windows Server 2008 或 Windows Server 2008 R2:

      • 在任务栏上,单击“开始”,指向“管理工具”,然后单击“Internet Information Services (IIS)管理器”
    • 如果使用的是 Windows Vista 或 Windows 7:

      • 在任务栏上,单击“开始”,然后单击“控制面板”。
      • 双击“管理工具”,然后双击“Internet Information Services (IIS) 管理器”。
  2. 在“连接”窗格中,单击要向其添加本机模块的服务器连接。

  3. 在服务器主页上,双击“模块”。
    Screenshot of five icons titled MIME Types, Modules, Output Caching, Server Certificates, and Worker Processes. The icon titled Modules is highlighted.

  4. 在“操作”窗格中,单击“配置本机模块...”

  5. 在“配置本机模块”对话框中,单击“注册...”
    Screenshot of the Configure Native Modules dialog box.

  6. 在“注册本机模块”对话框中的“名称”框中,键入本机模块的名称。

  7. 在“路径”框中,键入 .dll 文件所在位置的文件系统路径,或单击“浏览”按钮
    Screenshot of the Path box showing the file system path and the name of the location of the . d d l file.

  8. 在“配置本机模块”对话框中,选择刚刚注册的本机模块的选项,单击“确定”,然后再次单击“确定”。 这样,本机模块就可以运行了,并且可用于 Web 服务器上的站点和应用程序。

    注意

    如果不想启用本机模块运行,请清除本机模块的选项,然后单击“确定”。

  9. (可选)如果不希望在配置系统中较低级别重写本机模块,则可以锁定本机模块。 在“模块”页上,选择该模块,然后单击“操作”窗格中的“锁定”。

如何启用本机模块

  1. 打开 Internet Information Services (IIS) 管理器:

    • 如果使用的是 Windows Server 2012 或 Windows Server 2012 R2:

      • 在任务栏上,单击“服务器管理器”,单击“工具”,然后单击“Internet Information Services (IIS)管理器”
    • 如果使用的是 Windows 8 或 Windows 8.1:

      • 按住 Windows 键,按字母 X,然后单击“控制面板”。
      • 单击“管理工具”,然后双击“Internet Information Services (IIS) 管理器”。
    • 如果使用的是 Windows Server 2008 或 Windows Server 2008 R2:

      • 在任务栏上,单击“开始”,指向“管理工具”,然后单击“Internet Information Services (IIS)管理器”
    • 如果使用的是 Windows Vista 或 Windows 7:

      • 在任务栏上,单击“开始”,然后单击“控制面板”。
      • 双击“管理工具”,然后双击“Internet Information Services (IIS) 管理器”。
  2. 导航到要管理的服务器、站点或应用程序级别。

  3. 在服务器、站点或应用程序主页上,双击“模块”。

  4. 在“操作”窗格中,单击“配置本机模块...”

  5. 在“配置本机模块”对话框中,选择要启用的本机模块的选项,然后单击“确定”。
    Screenshot of the Configure Native Modules dialog box. The registered module titled UriCacheModule is selected.

配置

<globalModules> 元素都包含一组 <add> 元素。 集合中的每个元素都配置服务器的全局模块。

特性

无。

子元素

元素 说明
add 可选元素。

将本机模块添加到全局模块的集合中。
clear 可选元素。

从全局模块集合中移除对本机模块的所有引用。
remove 可选元素。

从全局模块集合中移除对特定本机模块的引用。

配置示例

下面的示例演示了一个 IIS 7 <globalModules> 节,其中包含 Web 服务器最低安装中包含的所有模块的条目。 还包括 BasicAuthenticationModule 的条目,还有第三方模块 ImageCopyrightModule 的条目。

<globalModules>
   <add name="UriCacheModule"
      image="%windir%\System32\inetsrv\cachuri.dll" />
   <add name="FileCacheModule"
      image="%windir%\System32\inetsrv\cachfile.dll" />
   <add name="TokenCacheModule"
      image="%windir%\System32\inetsrv\cachtokn.dll" />
   <add name="HttpCacheModule"
      image="%windir%\System32\inetsrv\cachhttp.dll" />
   <add name="StaticCompressionModule"
      image="%windir%\System32\inetsrv\compstat.dll" />
   <add name="DefaultDocumentModule"
      image="%windir%\System32\inetsrv\defdoc.dll" />
   <add name="DirectoryListingModule"
      image="%windir%\System32\inetsrv\dirlist.dll" />
   <add name="ProtocolSupportModule"
      image="%windir%\System32\inetsrv\protsup.dll" />
   <add name="StaticFileModule"
      image="%windir%\System32\inetsrv\static.dll" />
   <add name="AnonymousAuthenticationModule"
      image="%windir%\System32\inetsrv\authanon.dll" />
   <add name="RequestFilteringModule"
      image="%windir%\System32\inetsrv\modrqflt.dll" />
   <add name="CustomErrorModule"
      image="%windir%\System32\inetsrv\custerr.dll" />
   <add name="HttpLoggingModule"
      image="%windir%\System32\inetsrv\loghttp.dll" />
   <add name="RequestMonitorModule"
      image="%windir%\System32\inetsrv\iisreqs.dll" />
   <add name="BasicAuthenticationModule"
      image="%windir%\System32\inetsrv\authbas.dll" />
   <add name="ImageCopyrightModule"
      image="%windir%\System32\inetsrv\ImageCopyrightModule.dll" />
</globalModules>

代码示例

以下示例在 IIS 7 上安装名为 ImageCopyrightModule 的本机模块,并在整个服务器上自动启用它。

AppCmd.exe

appcmd.exe install module /name:ImageCopyrightModule /image:%windir%\system32\inetsrv\imageCopyrightModule.dll

还可以使用以下语法:

appcmd.exe set config -section:system.webServer/globalModules /+"[name='ImageCopyrightModule',image='%windir%\system32\inetsrv\imageCopyrightModule.dll']" /commit:apphost

注意

使用 AppCmd.exe 配置这些设置时,必须确保将 commit 参数设置为 apphost。 这会将配置设置提交到 ApplicationHost.config 文件中的相应位置部分。

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {
         Configuration config = serverManager.GetApplicationHostConfiguration();
         ConfigurationSection globalModulesSection = config.GetSection("system.webServer/globalModules");
         ConfigurationElementCollection globalModulesCollection = globalModulesSection.GetCollection();
         ConfigurationElement addElement = globalModulesCollection.CreateElement("add");
         addElement["name"] = @"ImageCopyrightModule";
         addElement["image"] = @"%windir%\system32\inetsrv\imageCopyrightModule.dll";
         globalModulesCollection.Add(addElement);
         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample
   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration
      Dim globalModulesSection As ConfigurationSection = config.GetSection("system.webServer/globalModules")
      Dim globalModulesCollection As ConfigurationElementCollection = globalModulesSection.GetCollection
      Dim addElement As ConfigurationElement = globalModulesCollection.CreateElement("add")
      addElement("name") = "ImageCopyrightModule"
      addElement("image") = "%windir%\system32\inetsrv\imageCopyrightModule.dll"
      globalModulesCollection.Add(addElement)
      serverManager.CommitChanges()
   End Sub
End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";

var globalModulesSection = adminManager.GetAdminSection("system.webServer/globalModules", "MACHINE/WEBROOT/APPHOST");
var globalModulesCollection = globalModulesSection.Collection;

var addElement = globalModulesCollection.CreateNewElement("add");
addElement.Properties.Item("name").Value = "ImageCopyrightModule";
addElement.Properties.Item("image").Value = "%windir%\\system32\\inetsrv\\imageCopyrightModule.dll";
globalModulesCollection.AddElement(addElement);

adminManager.CommitChanges();

VBScript

Set adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"

Set globalModulesSection = adminManager.GetAdminSection("system.webServer/globalModules", "MACHINE/WEBROOT/APPHOST")
Set globalModulesCollection = globalModulesSection.Collection

Set addElement = globalModulesCollection.CreateNewElement("add")
addElement.Properties.Item("name").Value = "ImageCopyrightModule"
addElement.Properties.Item("image").Value = "%windir%\system32\inetsrv\imageCopyrightModule.dll"
globalModulesCollection.AddElement addElement

adminManager.CommitChanges()