概觀
元素 <applicationDefaults> 的 <site> 元素會指定父網站中所有應用程式的預設應用程式設定。
注意
如果區段和 <application> 特定應用程式的 區段中都 <applicationDefaults> 設定了相同的屬性或子專案,則區段中的 <application> 組態會用於該應用程式。
相容性
| 版本 | 備註 |
|---|---|
| IIS 10.0 | 在 <applicationDefaults> IIS 10.0 中未修改專案。 |
| IIS 8.5 | 未 <applicationDefaults> 在 IIS 8.5 中修改專案。 |
| IIS 8.0 | 屬性 preLoadEnabled 已在 IIS 8.0 中新增。 |
| IIS 7.5 | 元素 <applicationDefaults> 已更新為包含 serviceAutoStartEnabled 和 serviceAutoStartProvider 屬性。 |
| IIS 7.0 |
<applicationDefaults>集合的 <site> 元素是在 IIS 7.0 中引進的。 |
| IIS 6.0 | 元素 <applicationDefaults> 類似于在 IIS 6.0 中繼基底的月臺層級設定應用程式選項。 |
安裝程式
元素 <applicationDefaults> 的 <site> 元素包含在 IIS 7 和更新版本的預設安裝中。
作法
如何設定網站的預設應用程式設定
(IIS) 管理員開啟 Internet Information Services:
如果您使用 Windows Server 2012 或 Windows Server 2012 R2:
- 在工作列上,依序按一下 [伺服器管理員]、[工具],然後按一下 [Internet Information Services] ([IIS) 管理員]。
如果您使用 Windows 8 或 Windows 8.1:
- 按住Windows鍵,按字母X,然後按一下[主控台]。
- 按一下 [ 系統管理工具],然後按兩下 [Internet Information Services] ([IIS) 管理員]。
如果您使用 Windows Server 2008 或 Windows Server 2008 R2:
- 在工作列上,按一下 [ 開始],指向 [ 系統管理工具],然後按一下 [ Internet Information Services (IIS) 管理員]。
如果您使用 Windows Vista 或 Windows 7:
- 在工作列上,按一下 [開始],然後按一下[主控台]。
- 按兩下 [ 系統管理工具],然後按兩下 [Internet Information Services] ([IIS) 管理員]。
在 [ 連線 ] 窗格中,展開伺服器名稱、展開 [月臺] 節點,然後按一下月臺的名稱。
組態
屬性
| 屬性 | 描述 |
|---|---|
applicationPool |
選擇性字串屬性。 指定指派父網站中所有應用程式的預設應用程式集區。 |
enabledProtocols |
選擇性字串屬性。 指定要用來與父月臺中所有應用程式通訊的通訊協定。 |
path |
選擇性字串屬性。 指定父網站中所有應用程式的預設虛擬路徑。 |
preLoadEnabled |
選擇性的 Boolean 屬性。 指定 IIS 會模擬應用程式或虛擬目錄的預設頁面的使用者要求,以便初始化。 實際上,IIS 會在應用程式集區啟動時啟動應用程式,而不需要收到要求。 這可藉由執行初始化工作來提升效能,例如載入 Managed 模組和編譯 Managed 程式碼。 IIS 記錄檔中不會產生任何記錄檔。 應用程式集區的 startMode 設定必須設定為 AlwaysRunning 。預設值是 False。 |
serviceAutoStartEnabled |
選擇性的 Boolean 屬性。 如果啟用此應用程式的自動啟動,則為true;否則為false。 預設值是 false。 |
serviceAutoStartProvider |
選擇性字串屬性。 指定 Windows 進程啟用服務 (WAS) 設定 serviceAutoStartEnabled 為 true時將使用的自動啟動提供者名稱。沒有任何預設值。 |
子元素
無。
組態範例
下列組態範例會將預設網站的預設應用程式集區設定為 「DefaultAppPool」。
<sites>
<site name="Default Web Site" id="1" serverAutoStart="true">
<application path="/" applicationPool="Classic .NET AppPool">
<virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\wwwroot" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:80:" />
</bindings>
<applicationDefaults applicationPool="DefaultAppPool" />
</site>
</sites>
範例程式碼
下列程式碼範例會將預設網站的預設應用程式集區設定為 「DefaultAppPool」。
AppCmd.exe
appcmd.exe set config -section:system.applicationHost/sites "/[name='Default Web Site'].applicationDefaults.applicationPool:DefaultAppPool" /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 sitesSection = config.GetSection("system.applicationHost/sites");
ConfigurationElementCollection sitesCollection = sitesSection.GetCollection();
ConfigurationElement siteElement = FindElement(sitesCollection, "site", "name", @"Default Web Site");
if (siteElement == null) throw new InvalidOperationException("Element not found!");
ConfigurationElement applicationDefaultsElement = siteElement.GetChildElement("applicationDefaults");
applicationDefaultsElement["applicationPool"] = @"DefaultAppPool";
serverManager.CommitChanges();
}
}
private static ConfigurationElement FindElement(ConfigurationElementCollection collection, string elementTagName, params string[] keyValues)
{
foreach (ConfigurationElement element in collection)
{
if (String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase))
{
bool matches = true;
for (int i = 0; i < keyValues.Length; i += 2)
{
object o = element.GetAttributeValue(keyValues[i]);
string value = null;
if (o != null)
{
value = o.ToString();
}
if (!String.Equals(value, keyValues[i + 1], StringComparison.OrdinalIgnoreCase))
{
matches = false;
break;
}
}
if (matches)
{
return element;
}
}
}
return null;
}
}
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 sitesSection As ConfigurationSection = config.GetSection("system.applicationHost/sites")
Dim sitesCollection As ConfigurationElementCollection = sitesSection.GetCollection
Dim siteElement As ConfigurationElement = FindElement(sitesCollection, "site", "name", "Default Web Site")
If (siteElement Is Nothing) Then
Throw New InvalidOperationException("Element not found!")
End If
Dim applicationDefaultsElement As ConfigurationElement = siteElement.GetChildElement("applicationDefaults")
applicationDefaultsElement("applicationPool") = "DefaultAppPool"
serverManager.CommitChanges()
End Sub
Private Function FindElement(ByVal collection As ConfigurationElementCollection, ByVal elementTagName As String, ByVal ParamArray keyValues() As String) As ConfigurationElement
For Each element As ConfigurationElement In collection
If String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase) Then
Dim matches As Boolean = True
Dim i As Integer
For i = 0 To keyValues.Length - 1 Step 2
Dim o As Object = element.GetAttributeValue(keyValues(i))
Dim value As String = Nothing
If (Not (o) Is Nothing) Then
value = o.ToString
End If
If Not String.Equals(value, keyValues((i + 1)), StringComparison.OrdinalIgnoreCase) Then
matches = False
Exit For
End If
Next
If matches Then
Return element
End If
End If
Next
Return Nothing
End Function
End Module
JavaScript
var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST");
var sitesCollection = sitesSection.Collection;
var siteElementPos = FindElement(sitesCollection, "site", ["name", "Default Web Site"]);
if (siteElementPos == -1) throw "Element not found!";
var siteElement = sitesCollection.Item(siteElementPos);
var applicationDefaultsElement = siteElement.ChildElements.Item("applicationDefaults");
applicationDefaultsElement.Properties.Item("applicationPool").Value = "DefaultAppPool";
adminManager.CommitChanges();
function FindElement(collection, elementTagName, valuesToMatch) {
for (var i = 0; i < collection.Count; i++) {
var element = collection.Item(i);
if (element.Name == elementTagName) {
var matches = true;
for (var iVal = 0; iVal < valuesToMatch.length; iVal += 2) {
var property = element.GetPropertyByName(valuesToMatch[iVal]);
var value = property.Value;
if (value != null) {
value = value.toString();
}
if (value != valuesToMatch[iVal + 1]) {
matches = false;
break;
}
}
if (matches) {
return i;
}
}
}
return -1;
}
VBScript
Set adminManager = WScript.CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST")
Set sitesCollection = sitesSection.Collection
siteElementPos = FindElement(sitesCollection, "site", Array("name", "Default Web Site"))
If (siteElementPos = -1) Then
WScript.Echo "Element not found!"
WScript.Quit
End If
Set siteElement = sitesCollection.Item(siteElementPos)
Set applicationDefaultsElement = siteElement.ChildElements.Item("applicationDefaults")
applicationDefaultsElement.Properties.Item("applicationPool").Value = "DefaultAppPool"
adminManager.CommitChanges()
Function FindElement(collection, elementTagName, valuesToMatch)
For i = 0 To CInt(collection.Count) - 1
Set element = collection.Item(i)
If element.Name = elementTagName Then
matches = True
For iVal = 0 To UBound(valuesToMatch) Step 2
Set property = element.GetPropertyByName(valuesToMatch(iVal))
value = property.Value
If Not IsNull(value) Then
value = CStr(value)
End If
If Not value = CStr(valuesToMatch(iVal + 1)) Then
matches = False
Exit For
End If
Next
If matches Then
Exit For
End If
End If
Next
If matches Then
FindElement = i
Else
FindElement = -1
End If
End Function