除了內(nèi)部性能增強(qiáng)和優(yōu)化外,該版本的 Active Server Pages(ASP) 還具有如下新功能:
更好的國(guó)際化和 UTF-8 支持
改進(jìn)的 POST 支持
ASP 掛起檢測(cè)
常用文件的緩存
UNC 增強(qiáng)
ASP 中的 COM+ 服務(wù)
單元模型選擇
并排集合
COM+ 分區(qū)
跟蹤程序
事務(wù)
ASP 的新配置數(shù)據(jù)庫(kù)屬性
更好的國(guó)際化和 UTF-8 支持
UTF-8 支持已經(jīng)被擴(kuò)展到所有 ASP 內(nèi)置對(duì)象的屬性和方法中。上一版本的 ASP 僅在響應(yīng)和寫(xiě)入方面支持 UTF-8。
改進(jìn)的 POST 支持
ASP 目前可以從客戶端讀取 Chunked 編碼的 POST 數(shù)據(jù)。
ASP 掛起檢測(cè)
當(dāng) IIS 網(wǎng)站繁忙時(shí),可能會(huì)出現(xiàn)這樣的情況:迅速生成最大數(shù)量的 ASP 線程,其中的一些 ASP 線程被掛起,從而導(dǎo)致性能下降。 HSE_REQ_REPORT_UNHEALTHY 以及萬(wàn)維網(wǎng)發(fā)布服務(wù)(WWW 服務(wù))將回收主控 ASP.dll 的工作進(jìn)程,并將項(xiàng)目添加到事件日志中。
注意 如果線程不響應(yīng)超時(shí),則將其視為“掛起”。
常用文件的緩存
目前,ASP 除了保留內(nèi)存緩存之外,還在磁盤(pán)上緩存一些最常用的文件。磁盤(pán)緩存的默認(rèn)位置是 %systemroot%\System32\inetsrv\ASP Compiled Templates。可以通過(guò)設(shè)置 AspDiskTemplateCacheDirectory 配置數(shù)據(jù)庫(kù)屬性來(lái)更改硬盤(pán)緩存的位置。
UNC 增強(qiáng)
目前,ASP 能夠處理 ASP 腳本中的 UNC 路徑。
ASP 中的 COM+ 服務(wù)
如果想要在以前版本的 IIS 中使用 ASP 應(yīng)用程序提供的 COM+ 服務(wù),您必須創(chuàng)建可以調(diào)用那些服務(wù)的方法的 COM 組件。目前,您可以配置 ASP 應(yīng)用程序以使用下面的 COM+ 服務(wù)而不必創(chuàng)建 COM 組件:
單元模型選擇:
ASP 現(xiàn)在能夠在多線程單元 (MTA) 中運(yùn)行其全部線程。如果 COM 組件主要是自由線程或雙線程組件,則將 ASP 線程作為 MTA 運(yùn)行可顯著改善性能。
要使 ASP 應(yīng)用程序能夠在 MTA 中運(yùn)行,您可以在應(yīng)用程序級(jí)別使用配置數(shù)據(jù)庫(kù)設(shè)置 AspExecuteInMTA。這意味著您可以讓一個(gè)應(yīng)用程序運(yùn)行于 ASP MTA 線程上,而讓第二個(gè)應(yīng)用程序運(yùn)行于 ASP STA(單線程單元)線程上。ASP 線程的默認(rèn)設(shè)置仍為 STA。
要點(diǎn) 當(dāng)您將 ASP 應(yīng)用程序的運(yùn)行環(huán)境從 STA 切換到 MTA(或從 MTA 切換到 STA)時(shí),則模擬令牌將過(guò)時(shí)。這可能導(dǎo)致應(yīng)用程序在無(wú)模擬的情況下運(yùn)行,讓其用可能允許訪問(wèn)其他資源的進(jìn)程的標(biāo)識(shí)有效地運(yùn)行。如果您必須切換線程模型,請(qǐng)?jiān)谶M(jìn)行更改之前禁用該應(yīng)用程序并將其卸載。
下列示例設(shè)置默認(rèn)網(wǎng)站應(yīng)用程序 (W3SVC/1/ROOT) 在 MTA 中執(zhí)行:
On Error Resume Next
set providerObj = GetObject("winmgmts://MyMachine/root/MicrosoftIISv2")
' 獲得對(duì)名為“默認(rèn)網(wǎng)站”的 ASP 應(yīng)用程序的引用
set IIsWebVirtualDirSettingObj = providerObj.get("IIsWebVirtualDirSetting='W3SVC/1/ROOT'")
WScript.Echo "Before: AspExecuteInMTA = " & IIsWebVirtualDirSettingObj.AspExecuteInMTA
' 將 ASP 應(yīng)用程序設(shè)置為在 MTA 中執(zhí)行
IIsWebVirtualDirSettingObj.AspExecuteInMTA = 1
IIsWebVirtualDirSettingObj.Put_()
WScript.Echo "After: AspExecuteInMTA = " & IIsWebVirtualDirSettingObj.AspExecuteInMTA
并排集合:
并排 (SxS) 集合允許 ASP 應(yīng)用程序指定要使用哪個(gè)版本的系統(tǒng) DLL 或傳統(tǒng) COM 組件,例如 MDAC、MFS、MSVCRT、MSXML 等。例如,如果您的 ASP 應(yīng)用程序依賴(lài) MSXML 2.0 版,則可以確保即使是在服務(wù)器上應(yīng)用了 Service Pack 之后,您的應(yīng)用程序仍使用 MSXML 2.0 版。任何新版本的 MSXML 仍安裝在計(jì)算機(jī)上,但是保留 2.0 版且由應(yīng)用程序使用。配置 SxS 程序集要求您知道 DLL 的路徑,且 COM+ 清單文件存在于每個(gè)需要使用 DLL 的虛擬目錄中。COM+ 清單是包含有關(guān) DLL 安裝位置信息的 XML 文件。IIS 不驗(yàn)證清單是否存在。清單的外觀類(lèi)似于下面的文件摘錄:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity publicKeyToken="75e377300ab7b886" type="win32" name="Test4Dir" version="1.0.0.0" processorArchitecture="x86"/>
<file name="DirComp.dll" hash="35ca6f27b11ed948ac6e50b75566355f0991d5d9" hashalg="SHA1">
<comClass clsid="{6C6CC20E-0F85-49C0-A14D-D09102BD7CDC}" progid="DirComp.PathInfo" threadingModel="apartment"/>
<typelib tlbid="{AA56D6B8-9ADB-415D-9E10-16DD68447319}" version="1.0" helpdir=""/>
</file>
</assembly>
您可以在 IIS 端以編程方式或者通過(guò)使用 IIS 管理器來(lái)啟用并排集合。
在 IIS 端使用 IIS 管理器啟用并排集合
在 IIS 管理器中,右鍵單擊網(wǎng)站或虛擬目錄,然后單擊“屬性”。
單擊“虛擬目錄”選項(xiàng)卡,然后單擊“配置”。
如果配置按鈕不可用,那么原因是還沒(méi)有為該虛擬目錄創(chuàng)建應(yīng)用程序。單擊“創(chuàng)建”以創(chuàng)建一個(gè)應(yīng)用程序。
在“應(yīng)用程序配置”對(duì)話框中,單擊“選項(xiàng)”選項(xiàng)卡。
選中“啟用并排集合”復(fù)選框。
在“清單文件名”框中,鍵入 COM+ 清單文件的名稱(chēng)。
單擊“確定”兩次。
要通過(guò)編程啟用并排集合,請(qǐng)?jiān)O(shè)置 AspAppServiceFlags 配置數(shù)據(jù)庫(kù)屬性的 AspEnableSxs 標(biāo)志。同時(shí)將 AspSxsName 配置數(shù)據(jù)庫(kù)屬性設(shè)置為 COM+ 清單的名稱(chēng)。在應(yīng)用程序級(jí)別設(shè)置這兩個(gè)配置數(shù)據(jù)庫(kù)屬性。
要點(diǎn) 即使該功能可在應(yīng)用程序級(jí)別進(jìn)行配置,在任何一個(gè)應(yīng)用程序池中都只能使用一個(gè)版本的系統(tǒng) DLL。例如,如果應(yīng)用程序 App1 使用 MDAC 2.5 版,應(yīng)用程序 App2 使用 MDAC 2.4 版,則 App1 和 App2 不應(yīng)位于同一個(gè)應(yīng)用程序池中。如果它們位于同一個(gè)應(yīng)用程序池中,則首先加載的應(yīng)用程序加載與之相對(duì)應(yīng)的 MDAC 版本,在卸載這些應(yīng)用程序之前,其他應(yīng)用程序只能被迫使用該版本。
下列示例在默認(rèn)網(wǎng)站應(yīng)用程序 (W3SVC/1/ROOT) 上啟用并排集合。請(qǐng)注意,只要設(shè)置了 AspEnableTracker 屬性,AspAppServiceFlags 屬性就發(fā)生改變:
On Error Resume Next
set providerObj = GetObject("winmgmts://MyMachine/root/MicrosoftIISv2")
' 獲得對(duì)名為“默認(rèn)網(wǎng)站”的 ASP 應(yīng)用程序的引用
set IIsWebVirtualDirSettingObj = providerObj.get("IIsWebVirtualDirSetting='W3SVC/1/ROOT'")
WScript.Echo "Before: AspEnableSxs = " & IIsWebVirtualDirSettingObj.AspEnableSxs
WScript.Echo " AspSxsName = " & IIsWebVirtualDirSettingObj.AspSxsName
WScript.Echo " AspAppServiceFlags = " & IIsWebVirtualDirSettingObj.AspAppServiceFlags
' 設(shè)置 ASP 應(yīng)用程序以啟用 COM+ 并排集合
IIsWebVirtualDirSettingObj.AspEnableSxs = 1
' 設(shè)置 AspSxsName 屬性
IIsWebVirtualDirSettingObj.AspSxsName = "VersionInfo"
' 將值保存到 IIS 配置數(shù)據(jù)庫(kù)中
IIsWebVirtualDirSettingObj.Put_()
' 再次獲得引用以刷新 AspAppServiceFlags 屬性。
set IIsWebVirtualDirSettingObj = Nothing
set IIsWebVirtualDirSettingObj = providerObj.get("IIsWebVirtualDirSetting='W3SVC/1/ROOT'")
WScript.Echo "After: AspEnableSxs = " & IIsWebVirtualDirSettingObj.AspEnableSxs
WScript.Echo " AspSxsName = " & IIsWebVirtualDirSettingObj.AspSxsName
WScript.Echo " AspAppServiceFlags = " & IIsWebVirtualDirSettingObj.AspAppServiceFlags
COM+ 分區(qū):
COM+ 分區(qū)可用于將 Web 應(yīng)用程序隔離到它們各自的 COM+ 分區(qū)中。這對(duì)于禁止一個(gè) Web 應(yīng)用程訪問(wèn)另一個(gè) Web 應(yīng)用程序的專(zhuān)用 COM+ 應(yīng)用程序、配置信息和數(shù)據(jù)非常有用。COM+ 分區(qū)可擁有自定義 COM 組件的不同版本。例如,如果為兩個(gè)競(jìng)爭(zhēng)的公司宿主網(wǎng)站,它們都在其 Web 應(yīng)用程序中使用了 COM+,則可以使用 COM+ 分區(qū)來(lái)確保一個(gè)公司的 Web 應(yīng)用程序不能訪問(wèn)另一個(gè)公司的 Web 應(yīng)用程序中的 COM+ 組件。如果其中某個(gè)公司要求您更改它們都使用的 COM+ 應(yīng)用程序的某些功能,您可以在鏈接到它們的 Web 應(yīng)用程序的分區(qū)中隔離該 COM+ 應(yīng)用程序的新版本。
要在 IIS 端啟用 COM+ 分區(qū),請(qǐng)?jiān)趹?yīng)用程序級(jí)別設(shè)置 AspAppServiceFlags 配置數(shù)據(jù)庫(kù)屬性的 AspUsePartition 標(biāo)志。分區(qū)由 GUID(使用組件服務(wù)管理器管理單元?jiǎng)?chuàng)建)標(biāo)識(shí),它可在 AspPartitionID 配置數(shù)據(jù)庫(kù)屬性上進(jìn)行設(shè)置。如果未指定任何分區(qū),則使用默認(rèn)系統(tǒng)分區(qū)。詳細(xì)信息,請(qǐng)參閱 COM+ SDK 中的“創(chuàng)建和配置 COM+ 分區(qū)”或聯(lián)機(jī)查看 COM+ (Component Services)。
要點(diǎn) 即使該功能可在應(yīng)用程序級(jí)別進(jìn)行配置,在任何一個(gè)應(yīng)用程序池中也只能使用一個(gè)版本的 COM+ 組件。例如,如果應(yīng)用程序 App1 使用名為 Shop.dll 的 1.0 版的自定義 COM+ 應(yīng)用程序,應(yīng)用程序 App2 使用 2.0 版的 Shop.dll,則 App1 和 App2 不應(yīng)位于同一個(gè)應(yīng)用程序池中。如果它們位于同一個(gè)應(yīng)用程序池中,則首先加載的應(yīng)用程序加載與之對(duì)應(yīng)的 Shop.dll 版本,在卸載這些應(yīng)用程序之前,另一個(gè)應(yīng)用程序只能被迫使用該版本。
下列示例在默認(rèn)網(wǎng)站應(yīng)用程序 (W3SVC/1/ROOT) 上啟用分區(qū)。請(qǐng)注意,只要設(shè)置了 AspEnableTracker 屬性,AspAppServiceFlags 屬性就發(fā)生改變。
On Error Resume Next
set providerObj = GetObject("winmgmts://MyMachine/root/MicrosoftIISv2")
' 獲得對(duì)名為“默認(rèn)網(wǎng)站”的 ASP 應(yīng)用程序的引用
set IIsWebVirtualDirSettingObj = providerObj.get("IIsWebVirtualDirSetting='W3SVC/1/ROOT'")
WScript.Echo "Before: AspUsePartition = " & IIsWebVirtualDirSettingObj.AspUsePartition
WScript.Echo " AspPartitionID = " & IIsWebVirtualDirSettingObj.AspPartitionID
WScript.Echo " AspAppServiceFlags = " & IIsWebVirtualDirSettingObj.AspAppServiceFlags
' 設(shè)置 ASP 應(yīng)用程序以啟用 COM+ 分區(qū)
IIsWebVirtualDirSettingObj.AspUsePartition = 1
' 將 AspPartitionID 屬性設(shè)置為在組件服務(wù)管理器中配置的 GUID
' 當(dāng)您創(chuàng)建 COM+ 分區(qū)時(shí)
IIsWebVirtualDirSettingObj.AspPartitionID = "{00000000-0000-0000-0000-000000000000}"
' 將值保存到 IIS 配置數(shù)據(jù)庫(kù)中
IIsWebVirtualDirSettingObj.Put_()
' 再次獲得引用以刷新 AspAppServiceFlags 屬性。
set IIsWebVirtualDirSettingObj = Nothing
set IIsWebVirtualDirSettingObj = providerObj.get("IIsWebVirtualDirSetting='W3SVC/1/ROOT'")
WScript.Echo "After: AspUsePartition = " & IIsWebVirtualDirSettingObj.AspUsePartition
WScript.Echo " AspPartitionID = " & IIsWebVirtualDirSettingObj.AspPartitionID
WScript.Echo " AspAppServiceFlags = " & IIsWebVirtualDirSettingObj.AspAppServiceFlags
跟蹤程序:
COM+ 跟蹤程序允許管理員或開(kāi)發(fā)人員調(diào)試 ASP 應(yīng)用程序。例如,如果 Web 應(yīng)用程序在服務(wù)器上產(chǎn)生問(wèn)題,則可以啟用 COM+ 跟蹤程序,以便確定 ASP 頁(yè)在何時(shí)加載、COM 組件在何時(shí)加載以及線程何時(shí)離開(kāi)網(wǎng)頁(yè)。在調(diào)試應(yīng)用程序之后,可禁用 COM+ 跟蹤程序,使應(yīng)用程序返回到正常的執(zhí)行速度。
要在 IIS 端上啟用 COM+ 跟蹤程序,請(qǐng)?jiān)趹?yīng)用程序級(jí)別中設(shè)置 AspAppServiceFlags 配置數(shù)據(jù)庫(kù)屬性的 AspEnableTracker 標(biāo)志。
下列示例在默認(rèn)網(wǎng)站應(yīng)用程序 (W3SVC/1/ROOT) 上啟用跟蹤。請(qǐng)注意,只要設(shè)置了 AspEnableTracker 屬性,AspAppServiceFlags 屬性就發(fā)生改變:
On Error Resume Next
set providerObj = GetObject("winmgmts://MyMachine/root/MicrosoftIISv2")
' 獲得對(duì)名為“默認(rèn)網(wǎng)站”的 ASP 應(yīng)用程序的引用
set IIsWebVirtualDirSettingObj = providerObj.get("IIsWebVirtualDirSetting='W3SVC/1/ROOT'")
WScript.Echo "Before: AspEnableTracker = " & IIsWebVirtualDirSettingObj.AspEnableTracker
WScript.Echo " AspAppServiceFlags = " & IIsWebVirtualDirSettingObj.AspAppServiceFlags
' 設(shè)置 ASP 應(yīng)用程序以啟用 COM+ 跟蹤
IIsWebVirtualDirSettingObj.AspEnableTracker = 1
IIsWebVirtualDirSettingObj.Put_()
' 再次獲得引用以刷新 AspAppServiceFlags 屬性。
set IIsWebVirtualDirSettingObj = Nothing
set IIsWebVirtualDirSettingObj = providerObj.get("IIsWebVirtualDirSetting='W3SVC/1/ROOT'")
WScript.Echo "After: AspEnableTracker = " & IIsWebVirtualDirSettingObj.AspEnableTracker
WScript.Echo " AspAppServiceFlags = " & IIsWebVirtualDirSettingObj.AspAppServiceFlags
事務(wù):從 IIS 4.0 版起,ASP 頁(yè)面中已經(jīng)支持事務(wù)的使用。但是,IIS 更改了事務(wù)的內(nèi)部實(shí)現(xiàn)以便利用 COM+ 服務(wù)。IIS 不再通過(guò)創(chuàng)建 COM 組件來(lái)容納事務(wù),而是直接訪問(wèn) COM+ 事務(wù)服務(wù),因而大大地提高了事務(wù)處理的速度。與以前一樣,事務(wù)只能在頁(yè)面級(jí)別進(jìn)行配置,配置時(shí)使用 @TRANSACTION 指令和 ASP 內(nèi)置對(duì)象的事件,該對(duì)象名為 ObjectContext。
ASP 的新配置數(shù)據(jù)庫(kù)屬性
下面的配置數(shù)據(jù)庫(kù)設(shè)置已被添加到此版本的 ASP 中。
配置數(shù)據(jù)庫(kù)屬性名 | 用途 |
---|---|
啟用諸如 COM+ 并排集合(以前被稱(chēng)為 Fusion)、分區(qū)等功能。 | |
指定 ASP 磁盤(pán)緩存的位置。 | |
使 ASP 線程能夠在多線程單元中執(zhí)行。 | |
將 ASP 會(huì)話 Cookie 安全地發(fā)送到瀏覽器。 | |
指定 ASP 的最大硬盤(pán)緩存。 | |
為應(yīng)用程序指定所使用的 COM+ 分區(qū)。 | |
使 ASP 能夠以匿名方式運(yùn)行 global.asa | |
指定緩沖區(qū)大小的限制。 | |
指定 ASP 請(qǐng)求的實(shí)體中允許的最大字節(jié)數(shù)。 | |
允許 ASP 應(yīng)用程序指定要使用的系統(tǒng) DLL 或 傳統(tǒng) COM 組件的版本。 |