Share via


Microsoft.Web.Administration을 사용하는 방법

작성자 : Saad Ladki

소개

IIS 7.0 이상에서는 XML 구성 파일을 완전히 조작하고 서버 개체에 편리하게 액세스할 수 있는 포괄적인 관리 코드 관리 API(애플리케이션 프로그래밍 인터페이스)를 제공합니다. 이 문서에서는 새 관리 API를 사용하여 서버 구성을 수정하고 서버 개체를 관리하는 방법을 안내합니다.

IIS에는 XML 구성 파일을 완전히 조작하여 구성을 편집할 수 있는 웹 서버에 대한 새로운 관리 API인 Microsoft.Web.Administration이 포함되어 있습니다. 또한 서버, 해당 속성 및 상태를 관리하는 편리한 개체를 제공합니다. API의 구성 편집 측면은 IIS 구성 파일 계층 구조 및 특정 구성 파일에서 구성 속성을 읽고 쓰는 프로그래밍 방식의 액세스를 제공합니다. 이 API의 개체 관리 측면은 서버(예: 사이트, 애플리케이션 풀, 작업자 프로세스 등)를 직접 관리하기 위한 일련의 최상위 관리 개체를 제공합니다.

관리 클래스는 Microsoft.Web.Administration 네임스페이스에 있습니다. 클래스는 구성의 특성(예: 가상 디렉터리의 경로)을 나타내는 속성 및 메서드 또는 개체에 대해 수행할 작업(예: 애플리케이션 풀 재활용)을 사용하여 구성 섹션 및 편의 개체에 액세스할 수 있는 약한 형식의 인터페이스를 제공합니다.

새 사이트 만들기

다음 코드는 루트 애플리케이션 및 루트 가상 디렉터리가 있는 "레이싱 카 사이트"라는 사이트를 만듭니다. 또한 포트 80에서 HTTP 프로토콜을 사용하도록 사이트를 설정하고 d:\inetput\wwwroot\racing에서 실제 경로를 정의합니다.

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Web.Administration;
namespace MSWebAdmin_Application
{       
    class Program
    {
        static void Main(string[] args)
        {
            ServerManager serverManager = new ServerManager();
            Site mySite = serverManager.Sites.Add("Racing Cars Site", "d:\\inetpub\\wwwroot\\racing",  8080);
            mySite.ServerAutoStart = true;
            serverManager.CommitChanges();
         }
    }
}

ServerManager는 강력한 형식의 방식으로 사용할 수 있는 속성 및 메서드가 있는 서버 편의 개체 집합을 포함하는 팩터리 클래스입니다. 서버를 관리하기 위한 기본 진입점입니다. 서버 관리는 다른 번거로운 경로(원시 구성 XML 액세스 또는 상태 API 호출)를 통해 수행되었을 수 있지만 이러한 개체를 통해 서버를 관리하는 것은 원활합니다. 서버 관리자를 통해 사용할 수 있는 가장 일반적인 개체 집합은 애플리케이션, 가상 디렉터리, 사이트, 작업자 프로세스 및 애플리케이션 도메인입니다.

ServerManager serverManager = new ServerManager();

사이트 개체를 사용하면 사이트 속성 및 애플리케이션에 액세스할 수 있습니다. 또한 시스템에 사이트를 추가하거나 총 사이트 수를 가져오는 메서드도 포함되어 있습니다. add 메서드는 사이트 이름, 루트 가상 디렉터리 경로 및 포트 번호를 정수로 정의합니다. 또한 이 호출은 Site 개체인 mySite로 인스턴스화되고 있으며, 그러면 해당 속성을 직접 수정하여 새로 만든 사이트에 대해 작업할 수 있습니다.

Site mySite = serverManager.Sites.Add("Racing Cars Site", "d:\\inetpub\\wwwroot\\racing",  8080);

편리한 개체를 사용하면 속성을 쉽게 수정할 수 있습니다. mySite 개체의 속성에 액세스하면 특정 XML 특성 또는 요소 개념을 모르고 사이트의 자동 시작 속성을 "true"로 직접 설정할 수 있습니다.

mySite.ServerAutoStart = true;

또한 자동 시작 속성을 수정하기 위해 사용할 수 있는 다른 경로는 사이트 개체를 인스턴스화하지 않는 것입니다. 대신 사이트를 만든 후 가져오고 해당 속성을 직접 수정합니다. 관리 개체는 전체 개체 집합을 나열하기 위해 비용이 많이 드는 호출을 발생하지 않고도 인덱서의 개념을 사용하여 이름 또는 인덱스 등의 키로 특정 개체를 검색합니다. 이름을 정의하면 특정 개체를 가져와서 작업할 수 있습니다.

serverManager.Sites["Racing Cars Site"].ServerAutoStart = true;

업데이트하기 위해 커밋 변경 호출은 트랜잭션을 실행하여 구성(변경된 경우)을 디스크로 직렬화합니다.

serverManager.CommitChanges();

위의 코드를 실행하면 섹션 내의 applicationHost.config 다음 출력이 생성됩니다. XML을 직접 조작하고 요소 및 특성 수준에서 작업하는 대신 서버 관리자 개체를 사용하여 웹 서버를 관리하는 편리한 방법을 제공합니다.

<site name="Racing Cars Site" id="2" serverAutoStart="true"> 
    <application path="/"> 
        <virtualDirectory path="/" physicalPath="d:\inetpub\wwwroot\racing" /> 
    </application> 
    <bindings> 
        <binding protocol="http" bindingInformation=":8080:" /> 
    </bindings> 
</site>

새 애플리케이션 풀 만들기

다음 코드는 기존 "레이싱 카 사이트"를 수정하고 d:\inetput\wwwroot\racing에서 이름과 실제 경로를 변경합니다. 또한 새 애플리케이션 풀을 만들고, 일부 속성을 정의하고, 이 풀을 사용하도록 레이싱 사이트를 설정하고, 마지막으로 재활용합니다.

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Web.Administration;
namespace MSWebAdmin_Application
{       
    class Program
    {
        static void Main(string[] args)
        {
            ServerManager serverManager = new ServerManager();
            Site site = serverManager.Sites["Racing Cars Site"];
            site.Name = "Racing Site";
            site.Applications[0].VirtualDirectories[0].PhysicalPath = "d:\\racing";
            serverManager.ApplicationPools.Add("RacingApplicationPool");
            serverManager.Sites["Racing Site"].Applications[0].ApplicationPoolName = "RacingApplicationPool";
            ApplicationPool apppool = serverManager.ApplicationPools["RacingApplicationPool"];
            apppool.ManagedPipelineMode = ManagedPipelineMode.ISAPI;
            serverManager.CommitChanges();
            apppool.Recycle();
        }
    }
}

사이트를 가져오기 위해 인덱싱하는 대신 사이트 개체를 인스턴스화하고 참조를 설정할 수 있습니다. 참조가 설정되면 사이트 개체에 대한 메서드(이 경우 이름)를 호출하여 사이트 이름을 직접 바꿀 수 있습니다.

Site site = serverManager.Sites["Racing Cars Site"];
site.Name = "Racing Site";

다음은 인덱서를 사용하여 루트 애플리케이션을 가져오고 루트 디렉터리를 가져와서 실제 경로를 설정하는 것입니다.

site.Applications[0].VirtualDirectories[0].PhysicalPath = "d:\\racing";

사이트 개체 외에도 구성 속성을 가져와서 설정하는 편리한 방법을 제공하고 상태 메서드 및 데이터에 대해 작동하는 애플리케이션 풀 개체가 있습니다. 새 애플리케이션 풀이 만들어지고 즉시 사이트가 해당 애플리케이션 풀에 배치됩니다.

serverManager.ApplicationPools.Add("RacingApplicationPool");
serverManager.Sites["Racing Site"].Applications[0].ApplicationPoolName = "RacingApplicationPool";

서버 관리자 사이트 개체와 마찬가지로 서버 관리자 애플리케이션 풀 개체를 사용하면 애플리케이션 풀 개체를 만들고 이에 대한 참조를 설정할 수 있습니다. 메서드에서 속성을 가져와서 설정하고 를 호출할 수도 있습니다.

애플리케이션 풀 구성 데이터가 업데이트 호출을 통해 파일에 직렬화되면 해당 데이터에서 휴지통 메서드를 실행할 수 있습니다. 애플리케이션 풀이 단순히 만들어지고 필요하지 않으므로 이 재활용 호출은 필요하지 않습니다. 그러나 이는 디스크로 직렬화된 후에만 만들어진 개체에서 작업을 수행할 수 있으며 서버가 이 구성을 가져와서 작업을 수행할 수 있음을 보여 줍니다.

ApplicationPool apppool = serverManager.ApplicationPools["RacingApplicationPool"];
apppool.ManagedPipelineMode = ManagedPipelineMode.ISAPI;
serverManager.CommitChanges();
apppool.Recycle();

위의 코드를 실행하면 섹션 내의 applicationHost.config 다음 출력이 생성됩니다. XML을 직접 조작하고 요소 및 특성 수준에서 작업하는 대신 서버 관리자 개체를 사용하여 웹 서버를 관리하는 편리한 방법을 제공합니다.

<site name="Racing Site" id="2" serverAutoStart="true"> 
    <application path="/"> 
        <virtualDirectory path="/" physicalPath="d:\racing" /> 
    </application> 
    <bindings> 
        <binding protocol="http" bindingInformation=":8080:" /> 
    </bindings> 
</site>

또한 섹션에 다음과 같은 변경 내용이 적용됩니다.

<add name="RacingApplicationPool" managedPipelineMode="ISAPI" />

사이트 루트 web.config 구성 설정

다음 코드는 사이트 "기본 웹 사이트"에 대해 섹션의 "enabled" 특성을 false로 설정합니다.

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Web.Administration;
namespace MSWebAdmin_Application
{
    class Program
    {
        static void Main(string[] args)
        {
            ServerManager serverManager = new ServerManager();
            Configuration config =
            mgr.GetWebConfiguration("Default Web Site");
            ConfigurationSection section = config.GetSection("system.webServer/defaultDocument");
            ConfigurationAttribute enabled = section.GetAttribute("enabled");
            enabled.Value = true;
            serverManager.CommitChanges();
        }
    }
}

구성은 시스템의 구성 섹션에 대한 액세스를 제공하는 클래스입니다. 구성을 가져오기 위한 다양한 호출에 따라 applicationHost.config, web.config, administration.config 또는 기타 구성 파일에 액세스할 수 있습니다. GetWebConfiguration 호출은 지정된 사이트(기본 웹 사이트) 및 특정 경로 루트에 대한 web.config 파일을 특히 가져옵니다.

Configuration config = serverManager.GetWebConfiguration("Default Web Site");

web.config 파일이 없는 경우 생성되면 섹션을 가져오기 위한 호출이 수행됩니다. 사용하지 않도록 설정하기 위해 섹션을 찾고 있습니다. web.config 파일이 존재하지 않거나 명시적으로 설정된 섹션이 없는 경우에도 사이트 수준에 유효한 구성이 적용됩니다. 재정의될 구성입니다.

ConfigurationSection section = config.GetSection("system.webServer/defaultDocument");

섹션 개체에서 메서드를 사용하면 활성화된 특성을 가져와서 값 메서드를 통해 값을 설정할 수 있습니다. 서버 관리자에서 커밋 변경 메서드를 호출한 후에만 변경 내용이 직렬화되어 디스크에 유지되고 서버에서 즉시 선택됩니다. 여러 구성 개체 인스턴스가 있는 경우 서버 관리자에서 커밋 변경 내용을 호출하면 모든 개체가 디스크에 유지됩니다.

ConfigurationAttribute enabled = section.GetAttribute("enabled");
enabled.Value = true;    
serverManager.CommitChanges();

섹션에서 특성 정보를 가져오고 설정하는 또 다른 옵션은 인덱서를 사용하는 것입니다. 사용하도록 설정된 특성 값을 설정하기 위해 섹션 개체를 얻은 후 다음 코드 줄을 사용할 수 있습니다.

section["enabled"] = true;

최종 결과는 지정된 사이트의 web.config 파일에 설정된 구성입니다.

applicationHost.config 사이트의 구성 설정

다음 코드는 사이트 "기본 웹 사이트"에 대해 섹션의 "enabled" 특성을 false로 설정합니다.

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Web.Administration;

namespace MSWebAdmin_Application
{
    class Program
    {
        static void Main(string[] args)
        {
            ServerManager serverManager = new ServerManager();
            Configuration config = serverManager.GetApplicationHostConfiguration();
            ConfigurationSection section = config.GetSection("system.webServer/defaultDocument","Default Web Site");
            ConfigurationAttribute enabled = section.GetAttribute("enabled");
            enabled.Value = false;
            serverManager.CommitChanges();
        }
    }
}

이 코드는 이전 작업과 사실상 동일합니다. 유일한 차이점은 GetApplicationHostconfiguration을 통해 applicationHost.config 파일을 가져오는 구성 관리자 호출입니다.

참고

get 섹션 호출은 읽거나 수정할 섹션과 해당 섹션의 위치 경로를 모두 지정하는 호출입니다.

Configuration config = serverManager.GetApplicationHostConfiguration();

최종 결과는 위치 태그를 통해 지정된 사이트에 적용할 수 있는 applicationHost.config 파일에 설정된 구성입니다.