다음을 통해 공유


Virtual Directory 기본값 <virtualDirectoryDefaults>

개요

<virtualDirectoryDefaults> 요소의 <application> 요소는 부모 애플리케이션의 모든 가상 디렉터리에 대한 기본 설정을 지정합니다. 요소는 <virtualDirectoryDefaults> 명시적으로 정의된 특성이 없는 경우 부모 애플리케이션의 모든 가상 디렉터리를 암시적으로 공유하려는 공통 특성을 정의하는 데 유용합니다.

참고

특정 가상 디렉터리에 대한 섹션과 <virtualDirectory> 섹션 모두에서 <virtualDirectoryDefaults> 동일한 특성 또는 자식 요소가 구성된 경우 섹션의 <virtualDirectory> 구성이 해당 가상 디렉터리에 사용됩니다.

호환성

버전 참고
IIS 10.0 <virtualDirectoryDefaults> 요소가 IIS 10.0에서 수정되지 않았습니다.
IIS 8.5 <virtualDirectoryDefaults> 요소가 IIS 8.5에서 수정되지 않았습니다.
IIS 8.0 <virtualDirectoryDefaults> 요소가 IIS 8.0에서 수정되지 않았습니다.
IIS 7.5 <virtualDirectoryDefaults> 요소가 IIS 7.5에서 수정되지 않았습니다.
IIS 7.0 <virtualDirectoryDefaults> 요소의 <application> 요소는 IIS 7.0에서 도입되었습니다.
IIS 6.0 해당 없음

설치 프로그램

<virtualDirectoryDefaults> 요소의 <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. 사이트의 창에서 작업 창에서 가상 디렉터리 보기를 클릭합니다.
    기본 창에서 MyApplication Home을 보여 주는 I S 관리자의 스크린샷 작업 창에서 가상 디렉터리 보기가 선택되어 있습니다.

  4. 가상 디렉터리 창의 작업 창에서 가상 디렉터리 기본값 설정...을 클릭합니다.
    기본 창에서 가상 디렉터리를 보여 주는 I S Manager의 스크린샷 작업 창에서 가상 디렉터리 추가가 선택됩니다.

  5. 가상 디렉터리 기본값 대화 상자에서 애플리케이션에 대한 기본 가상 디렉터리 자격 증명을 지정하고 확인을 클릭합니다.
    가상 디렉터리 기본값 대화 상자의 스크린샷 물리적 경로 자격 증명이 선택됩니다.

구성

특성

attribute Description
allowSubDirConfig 선택적 부울 특성입니다.

IIS가 현재 수준(true)보다 낮은 콘텐츠 디렉터리에서 Web.config 파일을 찾거나 현재 수준(false)보다 낮은 콘텐츠 디렉터리에서 Web.config 파일을 찾을지 여부를 지정합니다.

기본값은 true입니다.
logonMethod 선택적 열거형 특성입니다.

부모 사이트의 애플리케이션에 있는 모든 가상 디렉터리에 대한 기본 로그온 방법을 지정합니다.

logonMethod 특성은 다음과 같은 가능한 값 중 하나일 수 있습니다. 기본값은 ClearText입니다.
Description
Batch 이 로그온 유형은 해당 사용자의 직접 개입 없이 사용자를 대신하여 프로세스가 실행될 수 있는 일괄 처리 서버를 위한 것입니다.

숫자 값은 입니다 1.
ClearText 이 로그온 형식은 인증 패키지의 이름과 암호를 유지하므로 서버가 클라이언트를 가장하는 동안 다른 네트워크 서버에 연결할 수 있습니다.

숫자 값은 입니다 3.
Interactive 이 로그온 유형은 컴퓨터를 대화형으로 사용하는 사용자를 위한 것입니다.

숫자 값은 입니다 0.
Network 이 로그온 유형은 일반 텍스트 암호를 인증하는 고성능 서버를 위한 것입니다. 이 로그온 유형에 대한 자격 증명은 캐시되지 않습니다.

숫자 값은 입니다 2.
이러한 값에 대한 자세한 내용은 LogonUser를 참조하세요.
password 선택적 문자열 특성입니다.

사용자 이름과 연결된 암호를 지정합니다.

참고: 암호화되지 않은 암호 문자열을 구성 파일에 저장하지 않도록 하려면 항상 AppCmd.exe 또는 IIS Manager를 사용하여 암호를 입력합니다. 이러한 관리 도구를 사용하는 경우 암호 문자열은 XML 구성 파일에 기록되기 전에 자동으로 암호화됩니다. 이렇게 하면 암호화되지 않은 암호를 저장하는 것보다 더 나은 암호 보안이 제공됩니다.
path 선택적 문자열 특성입니다.

부모 사이트의 애플리케이션에 있는 모든 가상 디렉터리에 대한 기본 가상 경로를 지정합니다.
physicalPath 선택적 문자열 특성입니다.

부모 사이트의 애플리케이션에 있는 모든 가상 디렉터리에 대한 기본 물리적 경로를 지정합니다.
userName 선택적 문자열 특성입니다.

부모 사이트의 애플리케이션에 있는 모든 가상 디렉터리에 대한 구성 파일 및 콘텐츠에 액세스할 수 있는 계정의 기본 사용자 이름을 지정합니다.

자식 요소

없음

구성 샘플

다음 구성 샘플은 기본 웹 사이트의 "/MyApp" 애플리케이션에서 가상 디렉터리에 대한 기본 로그온 방법을 지정합니다.

<sites>
   <site name="Default Web Site" id="1">
      <application path="/">
         <virtualDirectory path="/" physicalPath="C:\Inetpub\wwwroot" />
      </application>
      <application path="/MyApp" applicationPool="DefaultAppPool">
         <virtualDirectory path="/" physicalPath="C:\inetpub\myapp" />
         <virtualDirectoryDefaults logonMethod="Network" />
      </application>
      <bindings>
         <binding protocol="http" bindingInformation="*:80:" />
      </bindings>
  </site>
</sites>

샘플 코드

다음 코드 샘플은 기본 웹 사이트의 "/MyApp" 애플리케이션에서 가상 디렉터리에 대한 기본 로그온 방법을 지정합니다.

AppCmd.exe

appcmd.exe set config -section:system.applicationHost/sites "/[name='Default Web Site'].[path='/MyApp'].virtualDirectoryDefaults.logonMethod:Network" /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!");

         ConfigurationElementCollection siteCollection = siteElement.GetCollection();
         ConfigurationElement applicationElement = FindElement(siteCollection, "application", "path", @"/MyApp");
         if (applicationElement == null) throw new InvalidOperationException("Element not found!");

         ConfigurationElement virtualDirectoryDefaultsElement = applicationElement.GetChildElement("virtualDirectoryDefaults");
         virtualDirectoryDefaultsElement["logonMethod"] = @"Network";

         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 siteCollection As ConfigurationElementCollection = siteElement.GetCollection
      Dim applicationElement As ConfigurationElement = FindElement(siteCollection, "application", "path", "/MyApp")
      If (applicationElement Is Nothing) Then
         Throw New InvalidOperationException("Element not found!")
      End If

      Dim virtualDirectoryDefaultsElement As ConfigurationElement = applicationElement.GetChildElement("virtualDirectoryDefaults")
      virtualDirectoryDefaultsElement("logonMethod") = "Network"

      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 siteCollection = siteElement.Collection;
var applicationElementPos = FindElement(siteCollection, "application", ["path", "/MyApp"]);
if (applicationElementPos == -1) throw "Element not found!";
var applicationElement = siteCollection.Item(applicationElementPos);

var virtualDirectoryDefaultsElement = applicationElement.ChildElements.Item("virtualDirectoryDefaults");
virtualDirectoryDefaultsElement.Properties.Item("logonMethod").Value = "Network";

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 siteCollection = siteElement.Collection
applicationElementPos = FindElement(siteCollection, "application", Array("path", "/MyApp"))
If (applicationElementPos = -1) Then
   WScript.Echo "Element not found!"
   WScript.Quit
End If
Set applicationElement = siteCollection.Item(applicationElementPos)

Set virtualDirectoryDefaultsElement = applicationElement.ChildElements.Item("virtualDirectoryDefaults")
virtualDirectoryDefaultsElement.Properties.Item("logonMethod").Value = "Network"

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