ASP COM Plus <comPlus>

<asp> 元素 <comPlus> 元素用于在 Internet Information Services (IIS) 7 中为 Active Server Pages (ASP) 配置以下 COM+ 设置:

  • appServiceFlags 属性包含必须设置为在 IIS 7 应用程序中启用 COM+ 服务的标志。 启用标志后,可能还需要设置其他属性。 有关详细信息,请参阅本文后面的配置部分。

  • executeInMta 属性指定 ASP 是否可以在多线程单元中运行脚本。 ASP 能够在多线程单元 (MTA) 中运行其所有线程。 如果 COM 组件主要是自由线程或双线程,则以 MTA 身份运行 ASP 线程可以显著提高性能。 默认情况下,executeInMta 属性设置为 false,这意味着 ASP 不会在 MTA 中执行。 在应用程序级别将此属性设置为 true,使 ASP 能够在 MTA 中运行。

  • partitionId 属性指定 COM+ 分区的全局唯一标识符 (GUID),该标识符用于将 Web 应用程序隔离到自己的 COM+ 分区中。 COM+ 分区保存你自己的自定义 COM 组件的不同版本。

    注意

    如果为 partitionId 属性指定值,则还需要设置 appServiceFlags 属性的 UsePartition 标志。

  • sxsName 属性指定 COM+ 应用程序的名称,并启用并行 (SxS) 程序集。 并行 (SxS) 程序集允许 ASP 应用程序指定要使用哪些版本的 SxS 支持系统 DLL,例如 MSVCRT、MSXML、COMCTL、GDIPLUS 等。

    注意

    如果为 sxsName 属性指定值,则还需要设置 appServiceFlags 属性的 EnableSxS 标志。

  • trackThreadingModel 属性指定 IIS 7 是否检查应用程序创建的任何组件的线程模型(COM 对象)。 此元数据库属性的首选设置为 false。 如果 trackThreadingModel 设置为 true,则适用以下条件:

    • ASP 使用系统资源跟踪线程模型,导致 ASP 应用程序性能降低。

    • OnStartPageOnEndPage 方法外部的 ASP 应用程序中创建的对象会早于预期释放,导致应用程序的可伸缩性降级,并可能阻止组件在对象析构函数方法中写入响应。

      如果trackThreadingModel 属性设置为 false,并且你为自己创建的组件规定了应用程序范围,则这些组件必须聚合自由线程封送处理器。 如果不聚合自由线程封送处理器,在在 ASP 尝试创建组件的实例时会生成错误。 有关详细信息,请参阅为 IIS 中的组件选择线程模型

兼容性

版本 说明
IIS 10.0 <comPlus> 元素在 IIS 10.0 中未进行修改。
IIS 8.5 <comPlus> 元素在 IIS 8.5 中未进行修改。
IIS 8.0 <comPlus> 元素在 IIS 8.0 中未进行修改。
IIS 7.5 <comPlus> 元素在 IIS 7.5 中未进行修改。
IIS 7.0 IIS 7.0 中引入了 <asp> 元素的 <comPlus> 元素。
IIS 6.0 <comPlus> 元素替换以下 IIS 6.0 元数据库属性:
  • AspAppServiceFlags
  • AspExecuteInMTA
  • AspPartitionID
  • AspSxsName
  • AspTrackThreadingModel

安装

要在 Web 服务器上支持和配置 ASP 应用程序,必须安装 ASP 模块。 要安装 ASP 模块,请遵循以下步骤。

Windows Server 2012 或 Windows Server 2012 R2

  1. 在任务栏上,单击 “服务器管理器”。 - 在“服务器管理器”中,单击“管理”菜单,然后单击“添加角色和功能”。 - 在“添加角色和功能”向导中,单击“下一步”。 选择安装类型,然后单击“下一步”。 选择目标服务器,然后单击“下一步”。 - 在“服务器角色”页上,依次展开“Web 服务器 (IIS)”、“Web 服务器”和“应用程序开发”,然后选择“ASP”。

    Screenshot of Web Server and Application Development pane expanded with A S P selected.

    如果出现“是否添加 ASP 所需的功能?”对话框,请单击“添加功能”。 (仅当尚未在服务器上安装 ISAPI 扩展角色服务时,才会显示此页面。)- 在“服务器角色”页上,单击“下一步”。 - 在“选择功能”页上,单击“下一步”。 - 在“确认安装选择”页上,单击“安装”。 - 在“结果”页面中单击“关闭”。

Windows 8 或 Windows 8.1

  1. 在“开始”屏幕上,将指针一直移动到左下角,右键单击“开始”按钮,然后单击“控制面板”

  2. 在“控制面板”中,单击“程序与功能”,然后单击“打开或关闭 Windows 功能”。

  3. 依次展开“Internet 信息服务”、“万维网服务”和“应用程序开发功能”,然后选择“ASP.NET”。

    Screenshot shows World Wide Web Services and Application Development Features node expanded with A S P selected.

    注意

    如果尚未安装 ISAPI 扩展角色,则会选择该角色。

  4. 单击“确定”。

  5. 单击“关闭” 。

Windows Server 2008 或 Windows Server 2008 R2

  1. 在任务栏上,单击“开始”,指向“管理工具”,然后单击“服务器管理器”。
  2. 在“服务器管理器”层次结构窗格中,展开“角色”,然后单击“Web 服务器(IIS)”。
  3. 在“Web 服务器(IIS)”窗格中,滚动到“角色服务”部分,然后单击“添加角色服务”。
  4. 在“添加角色服务向导”的“选择角色服务”页,选择“ASP”。
    Screenshot of Select Role Services page showing Application Development node expanded and A S P selected.
  5. 如果出现“添加 ASP 所需的角色服务”对话框,请单击“添加所需的角色服务”。 (仅当尚未在服务器上安装 ISAPI 扩展角色服务时,才会显示此页面。)
    Screenshot of Add role services required by A S P dialog box with Web Server I I S selected.
  6. 在“选择角色服务”页上,单击“下一步”。
  7. “确认安装选择”页中,单击“安装”
  8. 在“结果” 页面中单击“关闭”

Windows Vista 或 Windows 7

  1. 在任务栏上,单击“开始”,然后单击“控制面板”。

  2. 在“控制面板”中,单击“程序与功能”,然后单击“打开或关闭 Windows 功能”。

  3. 依次展开“Internet Information Services”、“万维网服务”和“应用程序开发功能”。

  4. 选择“ASP”,然后单击“确定”

    Screenshot of Internet Information Services and Application Development Features pane expanded with A S P selected.

操作方式

如何为站点或应用程序配置 ASP 会话状态设置

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

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

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

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

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

      • 在任务栏上,单击“开始”,然后单击“控制面板”。
      • 双击“管理工具”,然后双击“Internet 信息服务(IIS)管理器”。
  2. 在“连接”窗格中,展开服务器名称,展开“站点”,然后导航到要配置的网站或 Web 应用程序。

  3. 在站点或应用程序“主页”窗格中,双击“ASP”。
    Screenshot of Home pane showing A S P selected.

  4. 在 ASP 窗格中,展开“Com Plus 属性”部分并配置所需的设置。
    Screenshot of A S P pane displaying Com Plus Properties section highlighted.

  5. 在“操作”窗格中,单击“应用”

配置

特性

属性 说明
appServiceFlags 可选标志属性。

包含必须设置为在 IIS 应用程序中启用 COM+ 服务的标志。

appServiceFlags 属性的值可以是下列其中一个。 默认值为 None
说明
None 指定不设置任何标志。

数值为 0
EnableTracker 设置此标志可启用 COM+ 跟踪器,使管理员或开发人员能够调试 ASP 应用程序。

数值为 1
EnableSxS 设置此标志将启用 COM+ 并行程序集,该程序集允许 ASP 应用程序指定要使用的系统 DLL 或经典 COM 组件的版本,如 WinHTTP 5.1、Shell Common Controls 6.0 版 (Comctl32.dll)、GDI Plus 1.0 版 (GDIplus.dll) 和 Visual C++ 运行时库 6.0 版。 如果设置了此标志,则还必须指定 sxsName 属性的值。

数值为 2
UsePartition 设置此标志可启用 COM+ 分区,该分区可用于将 Web 应用程序隔离到自己的 COM+ 分区中。 COM+ 分区可以保存你自己的自定义 COM 组件的不同版本。 如果设置了此标志,则还必须指定 partitionId 属性的值。

数值为 4
executeInMta 可选布尔属性。

指定 ASP 是否在多线程环境中运行。

默认值为 false
partitionId 可选的字符串属性。

指定 COM+ 分区的全局唯一标识符 (GUID)。

注意:当 appServiceFlags 属性设置为 UsePartition 时,此属性是必需的

默认值为 00000000-0000-0000-0000-000000000000
sxsName 可选的字符串属性。

注意:当 appServiceFlags 属性设置为 EnableSxS 时,此属性是必需的。

指定 COM+ 应用程序的名称。
trackThreadingModel 可选布尔属性。

指定是否启用线程模型检查。 true 值表示 IIS 遵循应用程序创建的组件的线程模型。

默认值为 false

子元素

无。

配置示例

以下配置示例演示如何配置 IIS 以启用线程模型检查并配置 ASP 以在多线程隔离舱中运行。

<configuration>
   <system.webServer>
      <asp>
         <comPlus trackThreadingModel="true" executeInMta="true" />
      </asp>
   </system.webServer>
</configuration>

代码示例

以下代码示例演示如何配置 IIS 以启用线程模型检查并配置 ASP 以在多线程隔离舱中运行。

AppCmd.exe

appcmd.exe set config "Default Web Site" -section:system.webServer/asp /comPlus.trackThreadingModel:"True" /commit:apphost
appcmd.exe set config "Default Web Site" -section:system.webServer/asp /comPlus.executeInMta:"True" /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 aspSection = config.GetSection("system.webServer/asp", "Default Web Site");

         ConfigurationElement comPlusElement = aspSection.GetChildElement("comPlus");
         comPlusElement["trackThreadingModel"] = true;
         comPlusElement["executeInMta"] = true;

         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 aspSection As ConfigurationSection = config.GetSection("system.webServer/asp", "Default Web Site")

      Dim comPlusElement As ConfigurationElement = aspSection.GetChildElement("comPlus")
      comPlusElement("trackThreadingModel") = True
      comPlusElement("executeInMta") = True

      serverManager.CommitChanges()
   End Sub

End Module

JavaScript

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

var aspSection = adminManager.GetAdminSection("system.webServer/asp", "MACHINE/WEBROOT/APPHOST/Default Web Site");
var comPlusElement = aspSection.ChildElements.Item("comPlus");
comPlusElement.Properties.Item("trackThreadingModel").Value = true;
comPlusElement.Properties.Item("executeInMta").Value = true;

adminManager.CommitChanges();

VBScript

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

Set aspSection = adminManager.GetAdminSection("system.webServer/asp", "MACHINE/WEBROOT/APPHOST/Default Web Site")
Set comPlusElement = aspSection.ChildElements.Item("comPlus")
comPlusElement.Properties.Item("trackThreadingModel").Value = True
comPlusElement.Properties.Item("executeInMta").Value = True

adminManager.CommitChanges()