ASP 的新增功能
除了内部性能增强和优化外该版本的 Active Server Pages(ASP) 还具有如下新功能
更好的国际化和 UTF 支持
改进的 POST 支持
ASP 挂起检测
常用文件的缓存
UNC 增强
ASP 中的 COM+ 服务
单元模型选择
并排集合
COM+ 分区
跟蹤程序
事务
ASP 的新配置数据库属性
更好的国际化和 UTF 支持
UTF 支持已经被扩展到所有 ASP 内置对象的属性和方法中上一版本的 ASP 仅在响应和写入方面支持 UTF
改进的 POST 支持
ASP 目前可以从客户端读取 Chunked 编码的 POST 数据
ASP 挂起检测
当 IIS 网站繁忙时可能会出现这样的情况迅速生成最大数量的 ASP 线程其中的一些 ASP 线程被挂起从而导致性能下降 HSE_REQ_REPORT_UNHEALTHY 以及万维网发布服务(WWW 服务)将回收主控 ASPdll 的工作进程并将项目添加到事件日志中
注意 如果线程不响应超时则将其视为挂起
常用文件的缓存
目前ASP 除了保留内存缓存之外还在磁盘上缓存一些最常用的文件磁盘缓存的默认位置是 %systemroot%\System\inetsrv\ASP Compiled Templates可以通过设置 AspDiskTemplateCacheDirectory 配置数据库属性来更改硬盘缓存的位置
UNC 增强
目前ASP 能够处理 ASP 脚本中的 UNC 路径
ASP 中的 COM+ 服务
如果想要在以前版本的 IIS 中使用 ASP 应用程序提供的 COM+ 服务您必须创建可以调用那些服务的方法的 COM 组件目前您可以配置 ASP 应用程序以使用下面的 COM+ 服务而不必创建 COM 组件
单元模型选择
ASP 现在能够在多线程单元 (MTA) 中运行其全部线程如果 COM 组件主要是自由线程或双线程组件则将 ASP 线程作为 MTA 运行可显着改善性能
要使 ASP 应用程序能够在 MTA 中运行您可以在应用程序级别使用配置数据库设置 AspExecuteInMTA这意味着您可以让一个应用程序运行于 ASP MTA 线程上而让第二个应用程序运行于 ASP STA(单线程单元)线程上ASP 线程的默认设置仍为 STA
要点 当您将 ASP 应用程序的运行环境从 STA 切换到 MTA(或从 MTA 切换到 STA)时则模拟令牌将过时这可能导致应用程序在无模拟的情况下运行让其用可能允许访问其他资源的进程的标识有效地运行如果您必须切换线程模型请在进行更改之前禁用该应用程序并将其卸载
下列示例设置默认网站应用程序 (WSVC//ROOT) 在 MTA 中执行
On Error Resume Next
set providerObj = GetObject(winmgmts://MyMachine/root/MicrosoftIISv)
获得对名为默认网站的 ASP 应用程序的引用
set IIsWebVirtualDirSettingObj = providerObjget(IIsWebVirtualDirSetting=WSVC//ROOT)
WScriptEcho Before: AspExecuteInMTA = & IIsWebVirtualDirSettingObjAspExecuteInMTA
将 ASP 应用程序设置为在 MTA 中执行
IIsWebVirtualDirSettingObjAspExecuteInMTA =
IIsWebVirtualDirSettingObjPut_()
WScriptEcho After: AspExecuteInMTA = & IIsWebVirtualDirSettingObjAspExecuteInMTA
并排集合
并排 (SxS) 集合允许 ASP 应用程序指定要使用哪个版本的系统 DLL 或传统 COM 组件例如 MDACMFSMSVCRTMSXML 等例如如果您的 ASP 应用程序依赖 MSXML 版则可以确保即使是在服务器上应用了 Service Pack 之后您的应用程序仍使用 MSXML 版任何新版本的 MSXML 仍安装在计算机上但是保留 版且由应用程序使用配置 SxS 程序集要求您知道 DLL 的路径且 COM+ 清单文件存在于每个需要使用 DLL 的虚拟目录中COM+ 清单是包含有关 DLL 安装位置信息的 XML 文件IIS 不验证清单是否存在清单的外观类似于下面的文件摘录
<?xml version= encoding=UTF standalone=yes?>
<assembly xmlns=urn:schemasmicrosoftcom:asmv manifestVersion=>
<assemblyIdentity publicKeyToken=eabb type=win name=TestDir version= processorArchitecture=x/>
<file name=DirCompdll hash=cafbedacebfdd hashalg=SHA>
<comClass clsid={CCCEFCADDBDCDC} progid=DirCompPathInfo threadingModel=apartment/>
<typelib tlbid={AADBADBDEDD} version= helpdir=/>
</file>
</assembly>
您可以在 IIS 端以编程方式或者通过使用 IIS 管理器来启用并排集合
在 IIS 端使用 IIS 管理器启用并排集合
在 IIS 管理器中右键单击网站或虚拟目录然后单击属性
单击虚拟目录选项卡然后单击配置
如果配置按钮不可用那么原因是还没有为该虚拟目录创建应用程序单击创建以创建一个应用程序
在应用程序配置对话框中单击选项选项卡
选中启用并排集合复选框
在清单文件名框中键入 COM+ 清单文件的名称
单击确定两次
要通过编程启用并排集合请设置 AspAppServiceFlags 配置数据库属性的 AspEnableSxs 标志同时将 AspSxsName 配置数据库属性设置为 COM+ 清单的名称在应用程序级别设置这两个配置数据库属性
要点 即使该功能可在应用程序级别进行配置在任何一个应用程序池中都只能使用一个版本的系统 DLL例如如果应用程序 App 使用 MDAC 版应用程序 App 使用 MDAC 版则 App 和 App 不应位于同一个应用程序池中如果它们位于同一个应用程序池中则首先加载的应用程序加载与之相对应的 MDAC 版本在卸载这些应用程序之前其他应用程序只能被迫使用该版本
下列示例在默认网站应用程序 (WSVC//ROOT) 上启用并排集合请注意只要设置了 AspEnableTracker 属性AspAppServiceFlags 属性就发生改变
On Error Resume Next
set providerObj = GetObject(winmgmts://MyMachine/root/MicrosoftIISv)
获得对名为默认网站的 ASP 应用程序的引用
set IIsWebVirtualDirSettingObj = providerObjget(IIsWebVirtualDirSetting=WSVC//ROOT)
WScriptEcho Before: AspEnableSxs = & IIsWebVirtualDirSettingObjAspEnableSxs
WScriptEcho AspSxsName = & IIsWebVirtualDirSettingObjAspSxsName
WScriptEcho AspAppServiceFlags = & IIsWebVirtualDirSettingObjAspAppServiceFlags
设置 ASP 应用程序以启用 COM+ 并排集合
IIsWebVirtualDirSettingObjAspEnableSxs =
设置 AspSxsName 属性
IIsWebVirtualDirSettingObjAspSxsName = VersionInfo
将值保存到 IIS 配置数据库中
IIsWebVirtualDirSettingObjPut_()
再次获得引用以刷新 AspAppServiceFlags 属性
set IIsWebVirtualDirSettingObj = Nothing
set IIsWebVirtualDirSettingObj = providerObjget(IIsWebVirtualDirSetting=WSVC//ROOT)
WScriptEcho After: AspEnableSxs = & IIsWebVirtualDirSettingObjAspEnableSxs
WScriptEcho AspSxsName = & IIsWebVirtualDirSettingObjAspSxsName
WScriptEcho AspAppServiceFlags = & IIsWebVirtualDirSettingObjAspAppServiceFlags
COM+ 分区
COM+ 分区可用于将 Web 应用程序隔离到它们各自的 COM+ 分区中这对于禁止一个 Web 应用程访问另一个 Web 应用程序的专用 COM+ 应用程序配置信息和数据非常有用COM+ 分区可拥有自定义 COM 组件的不同版本例如如果为两个竞争的公司宿主网站它们都在其 Web 应用程序中使用了 COM+则可以使用 COM+ 分区来确保一个公司的 Web 应用程序不能访问另一个公司的 Web 应用程序中的 COM+ 组件如果其中某个公司要求您更改它们都使用的 COM+ 应用程序的某些功能您可以在链接到它们的 Web 应用程序的分区中隔离该 COM+ 应用程序的新版本
要在 IIS 端启用 COM+ 分区请在应用程序级别设置 AspAppServiceFlags 配置数据库属性的 AspUsePartition 标志分区由 GUID(使用组件服务管理器管理单元创建)标识它可在 AspPartitionID 配置数据库属性上进行设置如果未指定任何分区则使用默认系统分区详细信息请参阅 COM+ SDK 中的创建和配置 COM+ 分区或联机查看 COM+ (Component Services)
要点 即使该功能可在应用程序级别进行配置在任何一个应用程序池中也只能使用一个版本的 COM+ 组件例如如果应用程序 App 使用名为 Shopdll 的 版的自定义 COM+ 应用程序应用程序 App 使用 版的 Shopdll则 App 和 App 不应位于同一个应用程序池中如果它们位于同一个应用程序池中则首先加载的应用程序加载与之对应的 Shopdll 版本在卸载这些应用程序之前另一个应用程序只能被迫使用该版本
下列示例在默认网站应用程序 (WSVC//ROOT) 上启用分区请注意只要设置了 AspEnableTracker 属性AspAppServiceFlags 属性就发生改变
On Error Resume Next