Application for a Site <application> (2023)

  • Article
  • 8 minutes to read

Overview

The <application> element controls the configuration settings for a specific application. An application in Internet Information Services (IIS) 7 or later is a grouping of files that delivers content or provides services over protocols, such as HTTP. When you create an application in IIS 7 and later, the application's path becomes part of the site's URL.

In IIS 7 and later, each site must have at least one application, called the root or default application. However, a site can have more than one application. For example, your online commerce Web site can contain several applications, such as a shopping cart application that lets users gather items during shopping and a login application that allows users to recall saved payment information when they make a purchase.

An application must contain at least one virtual directory, called the root or default virtual directory with configuration settings defined in a <virtualDirectory> element.

Compatibility

VersionNotes
IIS 10.0The <application> element was not modified in IIS 10.0.
IIS 8.5The <application> element was not modified in IIS 8.5.
IIS 8.0The preloadEnabled attribute was added to initiate the initialization process prior to receiving a request.
IIS 7.5The <application> element was updated to include the serviceAutoStartEnabled and serviceAutoStartProvider attributes.
IIS 7.0The <application> element was introduced in IIS 7.0.
IIS 6.0The <application> element replaces the IIS 6.0 IIsWebVirtualDir and IIsWebDirectory metabase objects.

Setup

The <application> element is included in the default installation of IIS 7 and later.

How To

How to create a new Web application

  1. Open Internet Information Services (IIS) Manager:

    • If you are using Windows Server 2012 or Windows Server 2012 R2:

      • On the taskbar, click Server Manager, click Tools, and then click Internet Information Services (IIS) Manager.
    • If you are using Windows 8 or Windows 8.1:

      • Hold down the Windows key, press the letter X, and then click Control Panel.
      • Click Administrative Tools, and then double-click Internet Information Services (IIS) Manager.
    • If you are using Windows Server 2008 or Windows Server 2008 R2:

      • On the taskbar, click Start, point to Administrative Tools, and then click Internet Information Services (IIS) Manager.
    • If you are using Windows Vista or Windows 7:

      • On the taskbar, click Start, and then click Control Panel.
      • Double-click Administrative Tools, and then double-click Internet Information Services (IIS) Manager.
  2. In the Connections pane, expand the server name, expand Sites, and then click the Web site to which you want to add an application.

  3. In the Actions pane, click View Applications, and then click Add Application...
    Application for a Site <application> (1)

  4. In the Add Application dialog box, at a minimum enter information in the Alias: and Physical path: text boxes, and then click OK.
    Application for a Site <application> (2)

    Note

    You can click Select to choose a different application pool, click Connect as to configure the application to accept credentials from a specific account, and click Test Settings to test authentication and authorization settings for the application.

Configuration

The <application> element is configurable at the server level in the ApplicationHost.config file.

Attributes

AttributeDescription
applicationPoolOptional string attribute.

Specifies the application pool to which the application is assigned.

There is no default value.

enabledProtocolsOptional string attribute.

Specifies the protocols through which to communicate with the application. This value enables HTTP and HTTPS protocols for the application.

The default value is http.

pathRequired string attribute.

Specifies the virtual path of the application. Must be a unique path within the parent site.

There is no default value.

preloadEnabledOptional Boolean attribute.

Specifies that IIS simulates a user request to the default page of an application or virtual directory so that it is initialized. In effect IIS starts the application when the application pool is started without having received a request. This increases performance by performing initialization tasks such as loading managed modules and compiling managed code. No log is generated in the IIS logs. The application pool's startMode setting must be set to AlwaysRunning.

The default value is False.

serviceAutoStartEnabledOptional Boolean attribute.

true if the autostart is enabled for this application; otherwise, false.

The default value is false.

serviceAutoStartProviderOptional string attribute.

Specifies the name of the autostart provider that the Windows Process Activation Service (WAS) will use if serviceAutoStartEnabled is set to true.

There is no default value.

Child Elements

ElementDescription
virtualDirectoryOptional element.

Specifies configuration settings for a virtual directory in the parent application.

virtualDirectoryDefaultsOptional element.

Specifies the default settings for all virtual directories in the parent application.

Configuration Sample

The following configuration example displays a <site> element that contains two applications. The first <application> element defines the root application for the site, along with the root virtual directory for the application. The second <application> element contains the configuration settings for a CRM application on the Web site. The path attribute defines the path for the application. This <application> element contains two <virtualDirectory> elements. The first defines the root virtual directory for the application, and the second defines an Images virtual directory for the application.

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

Sample Code

The following examples create a new application named ShoppingCart with a virtual directory root of C:\Inetpub\Contoso\ShoppingCart for a site that is named Contoso.

Note

When you create an application from the command prompt or from a script, you must explicitly create a root virtual directory for the application.

AppCmd.exe

appcmd.exe set config -section:system.applicationHost/sites /+"[name='Contoso'].[path='/ShoppingCart']" /commit:apphostappcmd.exe set config -section:system.applicationHost/sites /+"[name='Contoso'].[path='/ShoppingCart'].[path='/',physicalPath='C:\Inetpub\Contoso\ShoppingCart']" /commit:apphost

Note

You must be sure to set the commit parameter to apphost when you use AppCmd.exe to configure these settings. This commits the configuration settings to the appropriate location section in the ApplicationHost.config file.

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 SystemImports System.TextImports Microsoft.Web.AdministrationModule 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 FunctionEnd 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.CollectionsiteElementPos = FindElement(sitesCollection, "site", Array("name", "Contoso"))If (siteElementPos = -1) Then WScript.Echo "Element not found!" WScript.QuitEnd IfSet siteElement = sitesCollection.Item(siteElementPos)Set siteCollection = siteElement.CollectionSet applicationElement = siteCollection.CreateNewElement("application")applicationElement.Properties.Item("path").Value = "/ShoppingCart"Set applicationCollection = applicationElement.CollectionSet 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 IfEnd Function
Top Articles
Latest Posts
Article information

Author: Neely Ledner

Last Updated: 03/25/2023

Views: 6138

Rating: 4.1 / 5 (62 voted)

Reviews: 93% of readers found this page helpful

Author information

Name: Neely Ledner

Birthday: 1998-06-09

Address: 443 Barrows Terrace, New Jodyberg, CO 57462-5329

Phone: +2433516856029

Job: Central Legal Facilitator

Hobby: Backpacking, Jogging, Magic, Driving, Macrame, Embroidery, Foraging

Introduction: My name is Neely Ledner, I am a bright, determined, beautiful, adventurous, adventurous, spotless, calm person who loves writing and wants to share my knowledge and understanding with you.