共用方式為


網站 < 應用程式的應用程式>

概觀

元素 <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> 已更新為包含 serviceAutoStartEnabledserviceAutoStartProvider 屬性。
IIS 7.0 元素 <application> 是在 IIS 7.0 中引進。
IIS 6.0 元素 <application> 會取代 IIS 6.0 IIsWebVirtualDirIIsWebDirectory 中繼基底物件。

安裝程式

元素 <application> 包含在 IIS 7 和更新版本的預設安裝中。

作法

如何建立新的 Web 應用程式

  1. 開啟 [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
  2. 在 [ 連線 ] 窗格中,展開伺服器名稱、展開 [網站],然後按一下您要新增應用程式的網站。

  3. 在 [ 動作 ] 窗格中,按一下 [ 檢視應用程式],然後按一下 [ 新增應用程式...
    I S Manager 中 [應用程式] 窗格的螢幕擷取畫面,其中已醒目提示 [動作] 窗格中的 [新增應用程式]。

  4. 在 [ 新增應用程式 ] 對話方塊中,至少在 [ 別名:] 和 [ 實體路徑:] 文字方塊中輸入資訊,然後按一下 [ 確定]。
    [新增應用程式] 對話方塊的螢幕擷取畫面,其中包含 [別名] 和 [實體路徑] 欄位。

    注意

    您可以按一下 [ 選取 ] 以選擇不同的應用程式集區,按一下 [ 連線為 ] 以設定應用程式以接受來自特定帳戶的認證,然後按一下 [ 測試設定 ] 以測試應用程式的驗證和授權設定。

組態

元素 <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