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 应用程序性能降低。
在 OnStartPage 或 OnEndPage 方法外部的 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 元数据库属性:
|
安装
要在 Web 服务器上支持和配置 ASP 应用程序,必须安装 ASP 模块。 要安装 ASP 模块,请遵循以下步骤。
Windows Server 2012 或 Windows Server 2012 R2
在任务栏上,单击 “服务器管理器”。 - 在“服务器管理器”中,单击“管理”菜单,然后单击“添加角色和功能”。 - 在“添加角色和功能”向导中,单击“下一步”。 选择安装类型,然后单击“下一步”。 选择目标服务器,然后单击“下一步”。 - 在“服务器角色”页上,依次展开“Web 服务器 (IIS)”、“Web 服务器”和“应用程序开发”,然后选择“ASP”。
如果出现“是否添加 ASP 所需的功能?”对话框,请单击“添加功能”。 (仅当尚未在服务器上安装 ISAPI 扩展角色服务时,才会显示此页面。)- 在“服务器角色”页上,单击“下一步”。 - 在“选择功能”页上,单击“下一步”。 - 在“确认安装选择”页上,单击“安装”。 - 在“结果”页面中单击“关闭”。
Windows 8 或 Windows 8.1
在“开始”屏幕上,将指针一直移动到左下角,右键单击“开始”按钮,然后单击“控制面板”。
在“控制面板”中,单击“程序与功能”,然后单击“打开或关闭 Windows 功能”。
依次展开“Internet 信息服务”、“万维网服务”和“应用程序开发功能”,然后选择“ASP.NET”。
注意
如果尚未安装 ISAPI 扩展角色,则会选择该角色。
单击“确定”。
单击“关闭” 。
Windows Server 2008 或 Windows Server 2008 R2
- 在任务栏上,单击“开始”,指向“管理工具”,然后单击“服务器管理器”。
- 在“服务器管理器”层次结构窗格中,展开“角色”,然后单击“Web 服务器(IIS)”。
- 在“Web 服务器(IIS)”窗格中,滚动到“角色服务”部分,然后单击“添加角色服务”。
- 在“添加角色服务向导”的“选择角色服务”页,选择“ASP”。
- 如果出现“添加 ASP 所需的角色服务”对话框,请单击“添加所需的角色服务”。 (仅当尚未在服务器上安装 ISAPI 扩展角色服务时,才会显示此页面。)
- 在“选择角色服务”页上,单击“下一步”。
- 在“确认安装选择”页中,单击“安装”。
- 在“结果” 页面中单击“关闭” 。
Windows Vista 或 Windows 7
在任务栏上,单击“开始”,然后单击“控制面板”。
在“控制面板”中,单击“程序与功能”,然后单击“打开或关闭 Windows 功能”。
依次展开“Internet Information Services”、“万维网服务”和“应用程序开发功能”。
选择“ASP”,然后单击“确定”。
操作方式
如何为站点或应用程序配置 ASP 会话状态设置
打开 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)管理器”。
在“连接”窗格中,展开服务器名称,展开“站点”,然后导航到要配置的网站或 Web 应用程序。
在“操作”窗格中,单击“应用”。
配置
特性
属性 | 说明 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
appServiceFlags |
可选标志属性。 包含必须设置为在 IIS 应用程序中启用 COM+ 服务的标志。 appServiceFlags 属性的值可以是下列其中一个。 默认值为 None 。
|
||||||||||
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()