應用程式集 < 區 applicationPools>
概觀
元素 <applicationPools>
包含 Internet Information Services 上執行的所有應用程式集區的組態設定, (IIS) 7 或更新版本伺服器上執行。 應用程式集區會定義一或多個背景工作進程群組,並使用一般設定來提供指派給該應用程式集區之一或多個應用程式的要求。 由於應用程式集區允許一組 Web 應用程式共用一或多個類似的背景工作進程,因此它們提供方便的方式,將一組 Web 應用程式與伺服器電腦上的其他 Web 應用程式隔離。 進程界限會分隔每個背景工作進程;因此,一個應用程式集區中的應用程式問題不會影響其他應用程式集區中的網站或應用程式。 應用程式集區可大幅提升 Web 基礎結構的可靠性與管理性。
您可以選擇在安裝時使用 IIS 所提供的預設應用程式集區,也可以建立自己的應用程式集區。 您可以視需要在 IIS 7 和更新版本伺服器上執行多個應用程式集區,但這可能會影響伺服器效能。 應用程式集區可以包含一或多個背景工作進程。 每個背景工作進程都代表正在為網站、Web 應用程式或 Web 服務完成的工作。 您可以讓多個背景工作進程在單一應用程式集區中執行,以建立 Web 樹系。
在 IIS 7 和更新版本中,每個應用程式集區都會使用兩種 .NET 整合模式之一來執行 ASP.NET 應用程式: 整合 式或 傳統。 為應用程式集區定義的 .NET 整合模式會決定 IIS 如何處理傳入要求至該應用程式集區中執行的網站、應用程式和 Web 服務。
- 整合 模式可讓 IIS 使用 IIS 7 和更新版本的整合管線來處理應用程式集區中的要求。 這可讓 ASP.NET 模組參與 IIS 要求處理,而不論所要求的資源類型為何。 使用整合模式可讓 ASP.NET 2.0 要求管線的可用功能提供給靜態內容的要求,以及 ASP、PHP 和其他內容類型。 根據預設,IIS 7 和更新版本應用程式集區會在此模式中執行。
- 傳統 模式會使用 IIS 6.0 處理管線來裝載 ASP.NET 應用程式。 在此模式中,要求一開始會透過 IIS 7 和更新模組處理,而 ASP.NET 要求會由aspnet_isapi.dll進一步處理。 ASP.NET 處理管線與 IIS 7 和更新版本的處理管線不同,而 ASP.NET 要求處理管線功能不適用於其他資源類型。 這也表示 ASP.NET 要求必須通過這兩個進程模型中的驗證和授權模組。 雖然這與整合模式不一樣有效率,但可讓您在 IIS 7 和更新版本伺服器上執行使用 ASP.NET 1.1 版開發的應用程式,而不需修改應用程式以整合模式執行。
IIS 7.5 和更新版本的新功能
從 IIS 7.5 開始,您可以設定應用程式使用元素的 <add>
managedRuntimeLoader、CLRConfigFile和startMode屬性自動啟動。 這些屬性會分別設定提供應用程式的執行時間載入的 Managed DLL 名稱、應用程式的 Common Language Runtime 組態檔,以及應用程式的啟動類型。
此外,IIS 7.5 和更新版本中的新功能是 元素identityType<processModel>
屬性的新 ApplicationPoolIdentity
類型。 這個新的身分識別類型現在是應用程式的預設進程身分識別,並可為您的內容區域設定安全性,以允許特定應用程式集區的存取。 若要這樣做,您可以使用 「IIS AppPool\DefaultAppPool」 之類的語法,使用應用程式集區的名稱來設定安全性。此身分識別會動態建立,進而大幅減少伺服器的介面攻擊區域。
相容性
版本 | 備註 |
---|---|
IIS 10.0 | 未在 IIS 10.0 中修改專案 <applicationPools> 。 |
IIS 8.5 | 未在 IIS 8.5 中修改專案 <applicationPools> 。 |
IIS 8.0 | 未在 IIS 8.0 中修改專案 <applicationPools> 。 |
IIS 7.5 | 元素 <add> 的 <applicationPools> 元素已在 IIS 7.5 中更新,以包含可讓您使用 managedRuntimeLoader、 CLRConfigFile和 startMode 屬性預先載入應用程式的屬性,以及使用新的 ApplicationPoolIdentity執行應用程式。 |
IIS 7.0 | 元素 <applicationPools> 是在 IIS 7.0 中引進。 |
IIS 6.0 | 元素 <applicationPools> 會取代 IIS 6.0 IIsApplicationPools Metabase 物件。 |
安裝程式
集合 <applicationPools>
包含在 IIS 7 和更新版本的預設安裝中。
作法
如何建立新的應用程式集區
開啟 [Internet Information Services (IIS) 管理員:
如果您使用 Windows Server 2012 或 Windows Server 2012 R2:
- 在工作列上,依序按一下 [伺服器管理員]、[工具],然後按一下 [Internet Information Services (IIS) Manager]。
如果您使用 Windows 8 或 Windows 8.1:
- 按住Windows鍵,按字母X,然後按一下[主控台]。
- 按一下 [系統管理工具],然後按兩下 [ Internet Information Services (IIS) Manager]。
如果您使用 Windows Server 2008 或 Windows Server 2008 R2:
- 在工作列上,按一下 [ 開始],指向 [ 系統管理工具],然後按一下 [ Internet Information Services (IIS) 管理員]。
如果您使用 Windows Vista 或 Windows 7:
- 在工作列上,按一下 [開始],然後按一下[主控台]。
- 按兩下 [系統管理工具],然後按兩下 [ Internet Information Services] (IIS) Manager。
在 [ 連線] 窗格中,展開伺服器名稱,然後按一下 [ 應用程式集區]。
在 [ 動作 ] 窗格中,按一下 [ 新增應用程式集區...]。
在 [新增應用程式集區] 對話方塊中,于 [名稱:]方塊中輸入應用程式集區的名稱,在[.NET Framework版本:] 下拉式清單中,選取您網站或應用程式所使用的.NET Framework版本,在[受控管線模式]中選取 [整合式] 或 [傳統],然後按一下 [確定]。
如何設定現有網站或應用程式的應用程式集區
- 在 [ 連線] 窗格中,展開 [ 網站],然後流覽至您想要新增至應用程式集區的網站或應用程式。
- 在 [ 動作 ] 窗格中,按一下 [ 進階設定...]
- 在 [進階設定] 對話方塊的 [一般] 區段中,按一下[應用程式集區] 專案,然後按一下省略號按鈕。
- 在 [ 選取應用程式集 區] 對話方塊中,從 [應用程式集區 : ] 下拉式方塊中選取應用程式集區,按一下 [ 確定],然後再按一下 [ 確定 ]。
組態
專案 <applicationPools>
包含專案的 <add>
集合。 集合中的每個專案都會設定在 IIS 7 和更新版本上執行的應用程式集區。 每個 <add>
元素至少都包含 一個名稱 屬性,可識別應用程式集區到 GUI 和命令列管理工具。 元素 <add>
包含子項目,可設定應用程式集區的進程模型、CPU 和回收設定。
元素 <applicationPools>
也包含 <applicationPoolDefaults>
元素,它會定義 IIS 7 和更新版本伺服器上所有應用程式集區的預設設定。 若要變更伺服器上的預設應用程式集區設定,您可以編輯 <applicationPoolDefaults>
元素。 當您建立新的應用程式集區時,該應用程式集區的組態設定會覆寫 元素中設定的 <applicationPoolDefaults>
預設值。
屬性
無。
子元素
元素 | 描述 |
---|---|
add |
將應用程式集區新增至 applicationPools 區段。 |
applicationPoolDefaults |
必要的字串屬性。 設定 applicationPools 區段中所有應用程式集區的預設設定。 |
組態範例
下列組態範例會使用應用程式集 <add>
<applicationPools>
區和元素來定義標準應用程式集區和 IIS 的預設值。
<applicationPools>
<add name="DefaultAppPool" />
<add name="Classic .NET AppPool" managedPipelineMode="Classic" />
<applicationPoolDefaults>
<processModel identityType="NetworkService" />
</applicationPoolDefaults>
</applicationPools>
範例程式碼
下列範例會新增名為 Contoso 的應用程式集區,並將受控管線模式設定為 [整合]。
AppCmd.exe
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso',autoStart='True',managedPipelineMode='Integrated']" /commit:apphost
注意
當您使用 AppCmd.exe 來設定這些設定時,請務必將 認可 參數 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 applicationPoolsSection = config.GetSection("system.applicationHost/applicationPools");
ConfigurationElementCollection applicationPoolsCollection = applicationPoolsSection.GetCollection();
ConfigurationElement addElement = applicationPoolsCollection.CreateElement("add");
addElement["name"] = @"Contoso";
addElement["autoStart"] = true;
addElement["managedPipelineMode"] = @"Integrated";
applicationPoolsCollection.Add(addElement);
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 applicationPoolsSection As ConfigurationSection = config.GetSection("system.applicationHost/applicationPools")
Dim applicationPoolsCollection As ConfigurationElementCollection = applicationPoolsSection.GetCollection
Dim addElement As ConfigurationElement = applicationPoolsCollection.CreateElement("add")
addElement("name") = "Contoso"
addElement("autoStart") = True
addElement("managedPipelineMode") = "Integrated"
applicationPoolsCollection.Add(addElement)
serverManager.CommitChanges()
End Sub
End Module
JavaScript
var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var applicationPoolsSection = adminManager.GetAdminSection("system.applicationHost/applicationPools",
"MACHINE/WEBROOT/APPHOST");
var applicationPoolsCollection = applicationPoolsSection.Collection;
var addElement = applicationPoolsCollection.CreateNewElement("add");
addElement.Properties.Item("name").Value = "Contoso";
addElement.Properties.Item("autoStart").Value = true;
addElement.Properties.Item("managedPipelineMode").Value = "Integrated";
applicationPoolsCollection.AddElement(addElement);
adminManager.CommitChanges();
VBScript
Set adminManager = CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set applicationPoolsSection = adminManager.GetAdminSection("system.applicationHost/applicationPools","MACHINE/WEBROOT/APPHOST")
Set applicationPoolsCollection = applicationPoolsSection.Collection
Set addElement = applicationPoolsCollection.CreateNewElement("add")
addElement.Properties.Item("name").Value = "Contoso"
addElement.Properties.Item("autoStart").Value = True
addElement.Properties.Item("managedPipelineMode").Value = "Integrated"
applicationPoolsCollection.AddElement(addElement)
adminManager.CommitChanges()