<processModel> 項目
設定 Microsoft Internet Information Services (IIS) Web 伺服器上的 ASP.NET 處理序模型設定。<processModel> 區段只能設定於 Machine.config 檔案中,並會影響在伺服器上執行的所有 ASP.NET 應用程式。
**警告 **請閱讀這個項目的<備註>章節。
<configuration>
<system.web>
<processModel>
<processModelenable="true|false"
timeout="hrs:mins:secs|Infinite"
idleTimeout="hrs:mins:secs|Infinite"
shutdownTimeout="hrs:mins:secs|Infinite"
requestLimit="hrs:mins:secs|Infinite"
requestQueueLimit="num|Infinite"
restartQueueLimit="num|Infinite"
memoryLimit="percent"
cpuMask="num"
webGarden="true|false"
userName="username"
password="password"
logLevel="All|None|Errors"
clientConnectedCheck="hrs:mins:secs|Infinite"
responseDeadlockInterval="hrs:mins:secs|Infinite"
responseRestartDeadlockInterval="hrs:mins:secs|Infinite"
comAuthenticationLevel="Default|None|Connect|Call|
Pkt|PktIntegrity|PktPrivacy"
comImpersonationLevel="Default|Anonymous|Identify|
Impersonate|Delegate"
maxWorkerThreads="num"
maxIoThreads="num"/>
選擇性屬性
屬性 | 選項 | 說明 |
---|---|---|
clientConnectedCheck | 指定 ASP.NET 進行用戶端連線檢查之前要求留在佇列中的時間。 | |
comAuthenticationLevel | 指定 DCOM 安全性的驗證層級。預設為 Connect。 | |
Default | 指定 DCOM 使用一般安全性交涉演算法來決定驗證層級。 | |
None | 不指定驗證。 | |
Connect | 指定 DCOM 只在用戶端與伺服器建立關係時才驗證用戶端的憑證。 | |
Call | 指定 DCOM 在伺服器於每個遠端程序呼叫開始處收到要求時驗證用戶端的憑證。 | |
Pkt | 指定 DCOM 驗證收到的所有資料都來自期望的用戶端。資料包 (Datagram) 傳輸必定使用 Pkt 驗證。 | |
PktIntegrity | 指定 DCOM 驗證和確認用戶端及伺服器之間傳送的資料都未遭到修改。 | |
PktPrivacy | 指定 DCOM 驗證所有先前的層級,並加密各遠端程序呼叫的引數值。 | |
comImpersonationLevel | 指定 COM 安全性的驗證層級。 | |
Default | 指定 DCOM 使用一般安全性交涉演算法決定模擬層級。 | |
匿名 | 指定用戶端對伺服器是匿名的。伺服器可模擬用戶端,但模擬 Token 不包含任何資訊。1.1 版不支援 Anonymous。 | |
Identify | 指定伺服器可取得用戶端的識別。伺服器可模擬用戶端以進行存取控制清單 (Access Control List,ACL) 檢查,但不可像用戶端一樣存取系統物件。 | |
Impersonate | 指定伺服器處理序在代表用戶端時可模擬用戶端的安全性內容。這個模擬層級可用來存取本機資源,例如檔案。當模擬為這個層級時,模擬 Token 只能傳送通過一個電腦邊界。 | |
Delegate | 指定伺服器處理序在代表用戶端時可模擬用戶端的安全性內容。伺服器處理序也可以在代表用戶端時使用 Cloaking 對其他伺服器進行外送呼叫。伺服器可以在其他電腦上使用用戶端的安全性內容,以便像用戶端一樣存取本機和遠端資源。當模擬為這個層級時,模擬 Token 可傳送通過許多電腦邊界。 | |
cpuMask | 指定多重處理器的伺服器上適合執行 ASP.NET 處理序的處理器。cpuMask 值指定位元模式,以指示適合執行 ASP.NET 執行緒的 CPU。例如,cpuMask 值 13 (亦即十六進位值 0x0d) 代表位元模式 1101。在具有四個 CPU 的電腦上,這表示 ASP.NET 處理序可排程於 CPU 0、2 和 3,但不可排程於 CPU 1。ASP.NET 會為每個適合的 CPU 啟動一個背景工作處理序。如果 webGarden 屬性 (如下所示) 設定為 true,則 cpuMask 會限制背景工作處理序為適合的 CPU 的個數(允許的最大背景工作處理序個數等於 CPU 的個數)。在預設狀況下,所有 CPU 都會啟用,且 ASP.NET 會為每個 CPU 啟動一個處理序。如果 webGarden 是設定為 false,則 cpuMask 屬性會被忽略,只有一個背景工作處理序會執行。 | |
enable | 指定是否啟用處理序模型。 | |
true | 指示啟用處理序模型。 | |
false | 指示停用處理序模型。 | |
idleTimeout | 指定未活動的週期,使用 hr:min:sec 字串格式,此後 ASP.NET 會自動結束背景工作處理序。預設為 Infinite。 | |
logLevel | 指定記錄至事件記錄中的事件型別。 | |
ALL | 指定記錄全部處理序事件。 | |
None | 指定不記錄任何事件。 | |
錯誤 | 指定只記錄意外關機、記憶體限制關機和鎖死關機。Errors 是預設值。 | |
maxWorkerThreads | 5 至 100 | 設定每一 CPU 用於處理序的最大執行緒個數。例如,如果在單一處理器伺服器上這個值為 25,則 ASP.NET 會使用 Runtime API,將處理序限制設定為 25。在雙處理器的伺服器上,則會將這個限制設定為 50。預設值為 20。maxWorkerThreads 的值必須等於或大於 <httpRuntime> 組態區段中的 minFreeThread 屬性設定。 |
maxIoThreads | 5 至 100 | 設定每一 CPU 用於處理序的最大 I/O 執行緒個數。例如,如果在單一處理器伺服器上這個值為 25,則 ASP.NET 會使用 Runtime API,將處理序限制設定為 25。在雙處理器的伺服器上,則會將這個限制設定為 50。預設值為 20。maxIoThreads 的值必須等於或大於 <httpRuntime> 組態區段中的 minFreeThread 屬性設定。 |
memoryLimit | 指定在 ASP.NET 啟動新處理序並重新指派現有的要求之前,背景工作處理序可使用的最大記憶體大小,以總系統記憶體的百分比表示。預設為百分之 60。 | |
password | 如果存在 (且結合 userName),則這個屬性會使背景工作處理序以設定的 Windows 識別來執行。預設值是 AutoGenerate。如需特殊名稱 System 和 Machine (不需要密碼) 的詳細資訊和在登錄中儲存加密背景工作處理序憑證的詳細資訊,請參閱 userName。 | |
pingFrequency | 指定在 ISAPI 擴充功能 Ping 背景工作處理序以確定它是否執行的時間間隔,使用標準處理序模型格式 (hr:min:sec)。如果在 pingTimeout 間隔內都未執行,就會重新啟動背景工作處理序。預設為 30 秒。 | |
pingTimeout | 指定在重新啟動無回應背景工作處理序之後等待的時間間隔,使用標準處理序模型格式 (hr:min:sec)。ISAPI 擴充功能在 pingFrequency 間隔內 Ping 背景工作處理序。如果在 pingTimeout 間隔內背景工作處理序無回應,就會重新啟動該處理序。預設為 5 秒。 | |
requestLimit | 指定在 ASP.NET 自動啟動新背景工作處理序以取代目前處理序之前允許的要求個數。預設為 Infinite。 | |
requestQueueLimit | 指定在 ASP.NET 開始將「503 - 伺服器忙碌中」錯誤傳回給新要求之前佇列中允許的要求數目。預設值是 5000。 | |
responseDeadlockInterval | 指定在符合下列條件而重新啟動處理序之前等待的時間間隔,使用標準處理序模型格式 (hr:min:sec):
預設為 3 分鐘。 |
|
responseRestartDeadlockInterval | ASP.NET 已不再使用這個屬性,這裡只為回溯相容性 (Backward Compatibility) 而提供。如果組態檔中已經有這個屬性,並不會造成組態錯誤。現在發生死結 (Deadlock) 情況時的所有回收作業,都是由 responseDeadlockInterval 屬性所控制。 | |
serverErrorMessageFile | 如果存在,則指定在遇到嚴重錯誤時使用檔案的內容來取代預設的「伺服器無法使用」訊息。在 Machine.config 中檔案位置為相對位置,也可為絕對檔案路徑。如果這個屬性不存在,則使用預設的「伺服器無法使用」訊息。 | |
shutdownTimeout | 指定背景工作處理序自行關閉所允許的分鐘數。當超過逾時時,ASP.NET 會關閉背景工作處理序。這個時間以 hr:min:sec 字串格式表示。預設為 5 秒或 0:00:05。 | |
timeout | 指定在 ASP.NET 啟動新背景工作處理序以取代目前處理序之前等待的分鐘數。預設為 Infinite。 | |
userName | 如果存在,userName 屬性會使用不同於預設處理序識別的 Windows 識別來執行 ASP.NET 背景工作處理序。根據預設,userName 是設定為特殊值 Machine,而處理序會在安裝 ASP.NET 時自動建立的使用者帳戶 (名為 ASPNET) 下執行。ASPNET 帳戶的密碼是在安裝時以密碼編譯的方式產生。如果在 userName 和 password 屬性中具有有效的憑證,則使用指定的帳戶來執行處理序。userName 的另一個特殊值是 System,其密碼為 AutoGenerate,會以系統管理員帳戶執行處理序,並允許所有在處理序下執行的 ASP.NET 使用者程式碼擁有完整的系統管理員權限。如需在做為網域控制站的伺服器上使用 ASP.NET 的詳細資訊,請參閱下列的<備註>章節。
userName 和 password 是以純文字的方式儲存在組態檔中。雖然 IIS 不會傳輸 .config 檔以回應使用者代理程式的要求,但可以利用其他方法讀取組態檔,例如,利用在包含伺服器的網域上,具有適當憑證的已驗證使用者。為了安全性考量,processModel 區段支援在登錄中儲存加密的 userName 和 password 屬性。憑證必須以 REG_BINARY 的格式,用 Windows 2000 和 Windows XP 資料保護 API (Windows XP Data Protection API,DPAPI) 保密功能加密。如需詳細資訊,請參閱下列的<備註>和<範例>章節。 |
|
webGarden | 控制搭配 cpuMask 屬性使用時的 CPU 相似性(多重處理器 Web 伺服器稱為 Web Gargen)。 | |
true | 指示 cpuMask 屬性可用來指定適於執行 ASP.NET 處理序的 CPU。 | |
false | 指示由 Windows 作業系統排定 CPU 使用量。cpuMask 屬性會被忽略,只有一個背景工作處理序會執行。預設為 false。 |
備註
管理的程式碼組態系統不會讀取 <processModel> 組態設定。而是由 aspnet_isapi.dll unmanaged DLL 直接讀取。重新啟動 IIS 之後才會套用這個區段的變更。
如果您在網域控制站上安裝 .NET Framework 1.1 版,安裝作業便不會建立本機 ASPNET 帳戶。相反的,ASP.NET 應用程式會在其他的識別下執行。在 Windows 2000 網域控制站伺服器上,ASP.NET 應用程式會在 IWAM_machinename 識別下執行。在 Windows 2003 網域控制器伺服器上,ASP.NET 應用程式會在 NETWORK SERVICE 識別下執行 (不論 IIS 隔離模式為何)。某些情況下,在網域控制器上執行 ASP.NET 將需要您執行額外的步驟,以確保安裝工作能正常進行。如需在網域控制器上執行 1.1 版的潛在問題的詳細資訊,請參閱 Microsoft 知識庫中的文件 Q824308<IWAM Account is Not Granted the Impersonate Privilege for ASP.NET 1.1 on Windows 2000 Domain Controller with SP4>,網址是 https://support.microsoft.com。如需在網域控制器上執行 .NET Framework 1.0 版的詳細資訊,請參閱 Microsoft 知識庫中的文件 Q315158<ASP.NET Does Not Work with the Default ASPNET Account on a Domain Controller>,網址是 https://support.microsoft.com。
當 ASP.NET 以原生 (Native) 模式在 IIS 第 6 版下執行時,會使用 IIS 6 處理序模型,而 <processModel> 區段中的設定會被忽略。若要設定處理序識別、循環或其他的處理序模型值,請使用 Internet 服務管理員 (Internet Services Manager) 使用者介面來設定應用程式的 IIS 背景工作處理序。
時間值採用「時:分:秒」的形式。如果提供了沒有冒號的單一數字,則該值會被假設為分鐘;因此 timeout="4" 等於 timeout="00:04:00"。
如果 ASP.NET 應用程式使得 ASP.NET 背景工作處理序 (在 Windows 2000 和 Windows XP Professional (商用版) 上為 aspnet_wp.exe,在 Windows Server 2003 系列產品上則為 w3wp.exe) 重新啟動,而且錯誤訊息指示重新啟動是由於死結狀態而造成,您便應該增加 responseDeadlockInterval 設定。
在登錄中儲存使用者名稱和密碼
若要加密使用者名稱和密碼,並將其儲存在登錄中,請按下列方式設定 userName 和 password。
userName="registry:HKLM\Software\AspNetProcess,Name"
password="registry:HKLM\Software\AspNetProcess,Pwd"
在關鍵字 registry 之後及逗號之前的字串部份,表示 ASP.NET 所開啟的登錄機碼 (Registry Key) 名稱。逗號之後的部份包含 ASP.NET 將讀取憑證的單一字串值。逗號為必要的,而且憑證必須儲存在 HKLM 群組中。如果組態格式不正確,ASP.NET 將不啟動背景工作處理序 (Worker Process),並遵循目前帳戶建立失敗的程式碼路徑。
憑證必須為 REG_BINARY 格式,包含對 Windows API 函式 CryptProtectData 呼叫的輸出。您可以建立加密憑證,並將其和 ASP.NET Set Registry 主控台應用程式 (Console Application) (Aspnet_setreg.exe) 一起儲存在登錄中;這個應用程式利用 CryptProtectData 完成加密。若要下載 Aspnet_setreg.exe、Visual C++ 原始程式碼和文件,請造訪網站 www.asp.net,搜尋「aspnet_setreg」。
您應該設定儲存加密憑證金鑰的存取權限,使存取權僅供系統管理員 (Administrator) 和系統 (SYSTEM) 使用。由於金鑰將由以 SYSTEM 執行的 ASP.NET 處理序讀取,因此您應設定下列權限:
Administrators:F
SYSTEM:F
CREATOR OWNER:F
ProcessAccount:R
這會提供兩行防禦措施,以協助保護資料:
- ACL 權限需要存取資料的識別 (Identity) 為系統管理員。
- 攻擊者必須在伺服器 (CryptUnprotectData) 中執行程式碼,才能復原帳戶憑證。
範例
下列範例指定幾種 <processModel> 組態設定。
<configuration>
<system.web>
<processModel
enable="true"
timeout="15"
idleTimeout="25"
shutdownTimeout="5"
requestLimit="1000"
requestQueueLimit="500"
responseDeadlockInterval="00:03:00"
responseRestartDeadlockInterval="Infinite"
memoryLimit="20"
webGarden="true"
maxWorkerThreads="25"
maxIoThreads="25"/>
</system.web>
</configuration>
下列範例指定加密的使用者名稱和密碼必須儲存在登錄中使用者定義的機碼 AspNetProcess
下。
<configuration>
<system.web>
<processModel>
userName="registry:HKLM\Software\AspNetProcess,Name"
password="registry:HKLM\Software\AspNetProcess,Pwd"
</processModel>
</system.web>
</configuration>
需求
包含於:<system.web>
**Web 平台:**IIS 5.0、IIS 5.1、IIS 6.0
**組態檔:**Machine.config
**組態區段處理常式:**System.Web.Configuration.ProcessModelConfigurationHandler