다음을 통해 공유


사이트 <애플리케이션에 대한 애플리케이션>

개요

요소는 <application> 특정 애플리케이션에 대한 구성 설정을 제어합니다. IIS(인터넷 정보 서비스) 7 이상의 애플리케이션은 콘텐츠를 제공하거나 HTTP와 같은 프로토콜을 통해 서비스를 제공하는 파일 그룹화입니다. IIS 7 이상에서 애플리케이션을 만들면 애플리케이션의 경로가 사이트 URL의 일부가 됩니다.

IIS 7 이상에서는 각 사이트에 루트 또는 기본 애플리케이션이라고 하는 애플리케이션이 하나 이상 있어야 합니다. 그러나 사이트에는 둘 이상의 애플리케이션이 있을 수 있습니다. 예를 들어 온라인 상거래 웹 사이트에는 쇼핑 중에 사용자가 항목을 수집할 수 있는 쇼핑 카트 애플리케이션과 사용자가 구매 시 저장된 결제 정보를 회수할 수 있는 로그인 애플리케이션과 같은 여러 애플리케이션이 포함될 수 있습니다.

애플리케이션에는 요소에 정의된 <virtualDirectory> 구성 설정이 있는 루트 또는 기본 가상 디렉터리라고 하는 가상 디렉터리가 하나 이상 포함되어야 합니다.

호환성

버전 참고
IIS 10.0 <application> 요소가 IIS 10.0에서 수정되지 않았습니다.
IIS 8.5 <application> 요소가 IIS 8.5에서 수정되지 않았습니다.
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 이상의 기본 설치에 포함됩니다.

방법

새 웹 애플리케이션을 만드는 방법

  1. IIS(인터넷 정보 서비스) 관리자를 엽니다.

    • Windows Server 2012 또는 Windows Server 2012 R2를 사용하는 경우:

      • 작업 표시줄에서 서버 관리자 클릭하고 도구를 클릭한 다음 IIS(인터넷 정보 서비스) 관리자를 클릭합니다.
    • Windows 8 또는 Windows 8.1 사용하는 경우:

      • Windows 키를 누른 채로 문자 X를 누른 다음 제어판 클릭합니다.
      • 관리 도구를 클릭한 다음 IIS(인터넷 정보 서비스) 관리자를 두 번 클릭합니다.
    • Windows Server 2008 또는 Windows Server 2008 R2를 사용하는 경우:

      • 작업 표시줄에서 시작을 클릭하고 관리 도구를 가리킨 다음 IIS(인터넷 정보 서비스) 관리자를 클릭합니다.
    • Windows Vista 또는 Windows 7을 사용하는 경우:

      • 작업 표시줄에서 시작을 클릭한 다음 제어판 클릭합니다.
      • 관리 도구를 두 번 클릭한 다음 IIS(인터넷 정보 서비스) 관리자를 두 번 클릭합니다.
  2. 연결 창에서 서버 이름을 확장하고 사이트를 확장한 다음 애플리케이션을 추가할 웹 사이트를 클릭합니다.

  3. 작업 창에서 애플리케이션 보기를 클릭한 다음 애플리케이션 추가...를 클릭합니다.
    작업 창에서 애플리케이션 추가가 강조 표시된 I S 관리자의 애플리케이션 창 스크린샷

  4. 애플리케이션 추가 대화 상자에서 최소한 별칭:실제 경로: 텍스트 상자에 정보를 입력한 다음 확인을 클릭합니다.
    별칭 및 실제 경로에 대한 필드가 있는 애플리케이션 추가 대화 상자의 스크린샷

    참고

    선택을 클릭하여 다른 애플리케이션 풀을 선택하고, 연결 을 클릭하여 특정 계정의 자격 증명을 수락하도록 애플리케이션을 구성하고, 설정 테스트를 클릭하여 애플리케이션에 대한 인증 및 권한 부여 설정을 테스트할 수 있습니다.

구성

요소는 <application> ApplicationHost.config 파일의 서버 수준에서 구성할 수 있습니다.

특성

attribute Description
applicationPool 선택적 문자열 특성입니다.

애플리케이션이 할당되는 애플리케이션 풀을 지정합니다.

기본값은 없습니다.
enabledProtocols 선택적 문자열 특성입니다.

애플리케이션과 통신할 프로토콜을 지정합니다. 이 값을 사용하면 애플리케이션에 대한 HTTP 및 HTTPS 프로토콜을 사용할 수 있습니다.

기본값은 http입니다.
path 필수 문자열 특성입니다.

애플리케이션의 가상 경로를 지정합니다. 부모 사이트 내의 고유한 경로여야 합니다.

기본값은 없습니다.
preloadEnabled 선택적 부울 특성입니다.

IIS가 초기화되도록 애플리케이션 또는 가상 디렉터리의 기본 페이지에 대한 사용자 요청을 시뮬레이션하도록 지정합니다. 실제로 IIS는 요청을 받지 않고 애플리케이션 풀이 시작될 때 애플리케이션을 시작합니다. 이렇게 하면 관리되는 모듈 로드 및 관리 코드 컴파일과 같은 초기화 작업을 수행하여 성능이 향상됩니다. IIS 로그에는 로그가 생성되지 않습니다. 애플리케이션 풀의 startMode 설정은 로 설정 AlwaysRunning해야 합니다.

기본값은 False입니다.
serviceAutoStartEnabled 선택적 부울 특성입니다.

이 애플리케이션에 대해 자동 시작을 사용하도록 설정하면 true이고, 그렇지 않으면 false입니다.

기본값은 false입니다.
serviceAutoStartProvider 선택적 문자열 특성입니다.

가 true로 설정된 경우 serviceAutoStartEnabled WAS(Windows Process Activation Service)에서 사용할 자동 시작 공급자의 이름을 지정 합니다.

기본값은 없습니다.

자식 요소

요소 Description
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라는 사이트에 대한 가상 디렉터리 루트가 C:\Inetpub\Contoso\ShoppingCart인 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 사용하여 이러한 설정을 구성할 때 commit 매개 변수 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