概觀
元素 <application> 會控制特定應用程式的組態設定。 Internet Information Services (IIS) 7 或更新版本中的應用程式是一組檔案,可提供內容或透過通訊協定提供服務,例如 HTTP。 當您在 IIS 7 和更新版本中建立應用程式時,應用程式的路徑會成為網站 URL 的一部分。
在 IIS 7 和更新版本中,每個網站都必須至少有一個應用程式,稱為根或預設應用程式。 不過,網站可以有多個應用程式。 例如,您的線上商務網站可以包含數個應用程式,例如購物車應用程式,可讓使用者在購物期間收集項目,以及讓使用者在購買時重新叫用已儲存的付款資訊登入應用程式。
應用程式必須包含至少一個虛擬目錄,稱為根目錄或預設虛擬目錄,且組態設定定義于 元素中 <virtualDirectory> 。
相容性
| 版本 | 備註 |
|---|---|
| IIS 10.0 | 未在 IIS 10.0 中修改專案 <application> 。 |
| IIS 8.5 | 未在 IIS 8.5 中修改專案 <application> 。 |
| IIS 8.0 | 已 preloadEnabled 新增 屬性,以在接收要求之前起始初始化程式。 |
| IIS 7.5 | 元素 <application> 已更新為包含 serviceAutoStartEnabled 和 serviceAutoStartProvider 屬性。 |
| IIS 7.0 | 元素 <application> 是在 IIS 7.0 中引進。 |
| IIS 6.0 | 元素 <application> 會取代 IIS 6.0 IIsWebVirtualDir 和 IIsWebDirectory 中繼基底物件。 |
安裝程式
元素 <application> 包含在 IIS 7 和更新版本的預設安裝中。
作法
如何建立新的 Web 應用程式
開啟 [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。
在 [ 連線 ] 窗格中,展開伺服器名稱、展開 [網站],然後按一下您要新增應用程式的網站。
在 [ 動作 ] 窗格中,按一下 [ 檢視應用程式],然後按一下 [ 新增應用程式...
在 [ 新增應用程式 ] 對話方塊中,至少在 [ 別名:] 和 [ 實體路徑:] 文字方塊中輸入資訊,然後按一下 [ 確定]。
注意
您可以按一下 [ 選取 ] 以選擇不同的應用程式集區,按一下 [ 連線為 ] 以設定應用程式以接受來自特定帳戶的認證,然後按一下 [ 測試設定 ] 以測試應用程式的驗證和授權設定。
組態
元素 <application> 可在 ApplicationHost.config 檔案的伺服器層級設定。
屬性
| 屬性 | 描述 |
|---|---|
applicationPool |
選擇性字串屬性。 指定指派應用程式的應用程式集區。 沒有任何預設值。 |
enabledProtocols |
選擇性字串屬性。 指定要用來與應用程式通訊的通訊協定。 這個值會啟用應用程式的 HTTP 和 HTTPS 通訊協定。 預設值是 http。 |
path |
必要的字串屬性。 指定應用程式的虛擬路徑。 必須是父月臺內的唯一路徑。 沒有任何預設值。 |
preloadEnabled |
選擇性的 Boolean 屬性。 指定 IIS 會模擬應用程式或虛擬目錄預設頁面的使用者要求,以便初始化它。 實際上,IIS 會在未收到要求的情況下啟動應用程式集區時啟動應用程式。 這會藉由執行初始化工作來提升效能,例如載入 Managed 模組和編譯 Managed 程式碼。 IIS 記錄檔中不會產生任何記錄。 應用程式集區的 startMode 設定必須設定為 AlwaysRunning 。預設值是 False。 |
serviceAutoStartEnabled |
選擇性的 Boolean 屬性。 如果啟用此應用程式的自動啟動,則為true;否則為false。 預設值是 false。 |
serviceAutoStartProvider |
選擇性字串屬性。 指定 Windows Process Activation Service (WAS) 設為 serviceAutoStartEnabledtrue時將使用的自動啟動提供者名稱。沒有任何預設值。 |
子元素
| 元素 | 描述 |
|---|---|
virtualDirectory |
選擇性項目。 指定父應用程式中虛擬目錄的組態設定。 |
virtualDirectoryDefaults |
選擇性項目。 指定父應用程式中所有虛擬目錄的預設設定。 |
組態範例
下列組態範例會顯示包含兩個 <site> 應用程式的 元素。 第一 <application> 個元素會定義網站的根應用程式,以及應用程式的根虛擬目錄。 第二 <application> 個專案包含網站上的 CRM 應用程式的組態設定。 path 屬性會定義應用程式的路徑。 這個專案 <application> 包含兩 <virtualDirectory> 個元素。 第一個定義應用程式的根虛擬目錄,第二個定義應用程式的 Images 虛擬目錄。
<site name="Contoso" id="2" serverAutoStart="true">
<application path="/">
<virtualDirectory path="/" physicalPath="C:\Contoso\Content" />
</application>
<application path="/CRM">
<virtualDirectory path="/" physicalPath="C:\Contoso\Content\CRM" />
<virtualDirectory path="/Images" physicalPath="E:\Images" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:80:www.contoso.com" />
</bindings>
</site>
範例程式碼
下列範例會針對名為 Contoso 的網站,建立名為 ShoppingCart 的新應用程式,其虛擬目錄根目錄為 C:\Inetpub\Contoso\ShoppingCart。
注意
當您從命令提示字元或腳本建立應用程式時,必須明確建立應用程式的根虛擬目錄。
AppCmd.exe
appcmd.exe set config -section:system.applicationHost/sites /+"[name='Contoso'].[path='/ShoppingCart']" /commit:apphost
appcmd.exe set config -section:system.applicationHost/sites /+"[name='Contoso'].[path='/ShoppingCart'].[path='/',physicalPath='C:\Inetpub\Contoso\ShoppingCart']" /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", @"Contoso");
if (siteElement == null) throw new InvalidOperationException("Element not found!");
ConfigurationElementCollection siteCollection = siteElement.GetCollection();
ConfigurationElement applicationElement = siteCollection.CreateElement("application");
applicationElement["path"] = @"/ShoppingCart";
ConfigurationElementCollection applicationCollection = applicationElement.GetCollection();
ConfigurationElement virtualDirectoryElement = applicationCollection.CreateElement("virtualDirectory");
virtualDirectoryElement["path"] = @"/";
virtualDirectoryElement["physicalPath"] = @"C:\Inetpub\Contoso\ShoppingCart";
applicationCollection.Add(virtualDirectoryElement);
siteCollection.Add(applicationElement);
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", "Contoso")
If (siteElement Is Nothing) Then
Throw New InvalidOperationException("Element not found!")
End If
Dim siteCollection As ConfigurationElementCollection = siteElement.GetCollection
Dim applicationElement As ConfigurationElement = siteCollection.CreateElement("application")
applicationElement("path") = "/ShoppingCart"
Dim applicationCollection As ConfigurationElementCollection = applicationElement.GetCollection
Dim virtualDirectoryElement As ConfigurationElement = applicationCollection.CreateElement("virtualDirectory")
virtualDirectoryElement("path") = "/"
virtualDirectoryElement("physicalPath") = "C:\Inetpub\Contoso\ShoppingCart"
applicationCollection.Add(virtualDirectoryElement)
siteCollection.Add(applicationElement)
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", "Contoso"]);
if (siteElementPos == -1) throw "Element not found!";
var siteElement = sitesCollection.Item(siteElementPos);
var siteCollection = siteElement.Collection;
var applicationElement = siteCollection.CreateNewElement("application");
applicationElement.Properties.Item("path").Value = "/ShoppingCart";
var applicationCollection = applicationElement.Collection;
var virtualDirectoryElement = applicationCollection.CreateNewElement("virtualDirectory");
virtualDirectoryElement.Properties.Item("path").Value = "/";
virtualDirectoryElement.Properties.Item("physicalPath").Value = "C:\\Inetpub\\Contoso\\ShoppingCart";
applicationCollection.AddElement(virtualDirectoryElement);
siteCollection.AddElement(applicationElement);
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 = 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", "Contoso"))
If (siteElementPos = -1) Then
WScript.Echo "Element not found!"
WScript.Quit
End If
Set siteElement = sitesCollection.Item(siteElementPos)
Set siteCollection = siteElement.Collection
Set applicationElement = siteCollection.CreateNewElement("application")
applicationElement.Properties.Item("path").Value = "/ShoppingCart"
Set applicationCollection = applicationElement.Collection
Set virtualDirectoryElement = applicationCollection.CreateNewElement("virtualDirectory")
virtualDirectoryElement.Properties.Item("path").Value = "/"
virtualDirectoryElement.Properties.Item("physicalPath").Value = "C:\Inetpub\Contoso\ShoppingCart"
applicationCollection.AddElement(virtualDirectoryElement)
siteCollection.AddElement(applicationElement)
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