처리기 <처리기>
개요
요소는 <handlers>
특정 파일 이름 확장명 또는 URL에 대해 등록된 처리기를 정의합니다.
처리기는 특정 콘텐츠에 대한 요청을 처리하도록 구성된 IIS(인터넷 정보 서비스) 구성 요소로, 일반적으로 요청 리소스에 대한 응답을 생성합니다. 예를 들어 ASP.NET 웹 페이지는 처리기의 한 유형입니다. 처리기를 사용하여 정적 파일이 아닌 사용자에게 정보를 반환해야 하는 모든 리소스에 대한 요청을 처리할 수 있습니다. IIS는 정적 파일, CGI(Common Gateway Interface) 애플리케이션, FastCGI 애플리케이션 및 ISAPI(인터넷 서버 API) 확장을 지원하는 여러 처리기 유형을 제공합니다. ASP.NET HTTP 처리기 인터페이스를 통해 추가 처리기 형식에 대한 지원도 제공합니다.
개발자는 애플리케이션에서 파일 이름 확장명을 사용하여 식별할 수 있는 특수 처리를 수행하는 사용자 지정 처리기를 만들 수 있습니다. 예를 들어 개발자가 RSS 형식 XML을 만든 처리기를 만든 경우 애플리케이션의 .rss 파일 이름 확장명을 사용자 지정 처리기에 바인딩할 수 있습니다. 개발자는 특정 파일에 매핑되는 처리기를 만들 수도 있으며 이러한 처리기를 네이티브 모듈 또는 ASP.NET IHttpHandler 인터페이스의 구현으로 구현할 수 있습니다.
호환성
버전 | 참고 |
---|---|
IIS 10.0 | <handlers> 요소가 IIS 10.0에서 수정되지 않았습니다. |
IIS 8.5 | <handlers> 요소가 IIS 8.5에서 수정되지 않았습니다. |
IIS 8.0 | <handlers> 요소가 IIS 8.0에서 수정되지 않았습니다. |
IIS 7.5 | <handlers> 요소가 IIS 7.5에서 수정되지 않았습니다. |
IIS 7.0 | 요소는 <handlers> IIS 7.0에서 도입되었습니다. |
IIS 6.0 | 해당 없음 |
설치 프로그램
요소는 <handlers>
IIS 7의 기본 설치에 포함됩니다.
방법
통합 모드에서 실행되는 IIS 7 애플리케이션에서 ASP.NET 처리기에 대한 처리기 매핑을 만드는 방법
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(인터넷 정보 서비스) 관리자를 두 번 클릭합니다.
연결 창에서 네이티브 모듈을 추가할 서버 연결을 클릭합니다.
홈 창에서 처리기 매핑을 두 번 클릭합니다.
작업 창에서 관리되는 처리기 추가...를 클릭합니다.
관리되는 처리기 추가 대화 상자에서 다음을 지정합니다.
요청 경로입니다. 매핑할 파일 이름 또는 파일 이름 확장명입니다.
Type. 관리되는 처리기의 형식(클래스) 이름입니다. 처리기가 애플리케이션의 app_code 또는 bin 폴더에 정의된 경우 해당 형식 이름이 드롭다운 목록에 표시됩니다.
이름. 설명이 포함된 이름입니다.
확인을 클릭하여 관리되는 처리기 추가 대화 상자를 닫습니다.
FastCGI 처리기 매핑을 만드는 방법
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(인터넷 정보 서비스) 관리자를 두 번 클릭합니다.
연결 창에서 FastCGI 처리기 매핑을 구성할 서버 이름을 클릭합니다.
홈 창에서 처리기 매핑을 두 번 클릭합니다.
작업 창에서 모듈 매핑 추가...를 클릭합니다.
참고
다음 단계가 작동하려면 지정한 파일 경로 또는 파일 이름 확장명을 실행할 이진 파일이 이미 설치되어 있어야 합니다. 이 예제에서는 Microsoft 웹 사이트에서 사용할 수 있는 PHP 구현을 사용합니다.
요청 경로 상자에 파일 이름 확장명(예: .php)을 입력하고, 모듈 드롭다운 목록에서 FastCGIModule을 클릭하고, 실행 파일 상자에 스크립팅 엔진의 경로(이 예제에서는 PHP-CGI.exe)를 입력한 다음 확인을 클릭합니다.
모듈 매핑 추가 대화 상자에서 예를 클릭합니다.
구성
<handlers>
요소는 요소의 <add>
컬렉션을 포함하며, 각 요소는 애플리케이션에 대한 처리기 매핑을 정의합니다. <add>
요소에는 처리기의 이름, 처리기가 매핑되는 파일 이름 확장명 또는 URL 경로 마스크, 처리기 구현을 지정하는 모듈 이름 또는 ASP.NET HTTP 처리기 형식이 포함됩니다.
Web.config 파일의 애플리케이션 수준에서 요소를 구성 <handlers>
합니다.
특성
attribute | Description | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
accessPolicy |
선택적 flags 특성입니다. 전체 처리기 컬렉션에 허용되는 액세스 형식을 지정합니다. accessPolicy 특성은 다음과 같은 가능한 값 중 하나일 수 있습니다. 기본값은 Read 입니다.
|
자식 요소
요소 | Description |
---|---|
add |
선택적 요소입니다. 처리기 컬렉션에 처리기를 추가합니다. |
clear |
선택적 요소입니다. 처리기 컬렉션에서 처리기에 대한 모든 참조를 제거합니다. |
remove |
선택적 요소입니다. 처리기 컬렉션에서 처리기에 대한 참조를 제거합니다. |
구성 샘플
다음 예제에는 처리기 매핑을 정의하는 두 <add>
가지 요소가 포함되어 있습니다. 첫 번째 <add>
요소는 IIS 7 통합 모드에서 실행되는 웹 애플리케이션에 대한 SampleHandler 처리기를 정의합니다. 웹 애플리케이션의 app_code 디렉터리에 처리기 어셈블리를 추가하는 경우 형식 특성 값에 어셈블리 이름을 포함할 필요가 없습니다. 두 번째 <add>
요소는 FastCGI 모듈을 사용하는 PHP 요청에 대한 매핑을 정의합니다.
<handlers>
<add name="SampleHandler" verb="*"
path="SampleHandler.new"
type="SampleHandler, SampleHandlerAssembly"
resourceType="Unspecified" />
<add name="PHP-FastCGI" verb="*"
path="*.php"
modules="FastCgiModule"
scriptProcessor="c:\php\php-cgi.exe"
resourceType="Either" />
</handlers>
샘플 코드
다음 예제에서는 PHP 모듈에 대한 FastCGI 매핑을 추가한 다음, PHP 요청을 처리할 Contoso 웹 사이트에 처리기를 추가합니다.
AppCmd.exe
appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='c:\php\php-cgi.exe']" /commit:apphost
appcmd.exe set config "Contoso" -section:system.webServer/handlers /+"[name='PHP-FastCGI',path='*.php',verb='GET,HEAD,POST',modules='FastCgiModule',scriptProcessor='c:\php\php-cgi.exe',resourceType='Either']"
참고
이 두 번째 예제에서는 특정 URL에 대해 SampleHandler.new라는 새 ASP.NET 처리기 매핑을 웹 애플리케이션에 추가하는 방법을 보여 줍니다.
appcmd.exe set config /section:system.webServer/handlers /+[name=SampleHandler',path='SampleHandler.new',verb='*',type='SampleHandler']
C#
using System;
using System.Text;
using Microsoft.Web.Administration;
internal static class Sample
{
private static void Main()
{
using (ServerManager serverManager = new ServerManager())
{
Configuration appHostConfig = serverManager.GetApplicationHostConfiguration();
ConfigurationSection fastCgiSection = appHostConfig.GetSection("system.webServer/fastCgi");
ConfigurationElementCollection fastCgiCollection = fastCgiSection.GetCollection();
ConfigurationElement applicationElement = fastCgiCollection.CreateElement("application");
applicationElement["fullPath"] = @"c:\php\php-cgi.exe";
fastCgiCollection.Add(applicationElement);
Configuration webConfig = serverManager.GetWebConfiguration("Contoso");
ConfigurationSection handlersSection = webConfig.GetSection("system.webServer/handlers");
ConfigurationElementCollection handlersCollection = handlersSection.GetCollection();
ConfigurationElement addElement = handlersCollection.CreateElement("add");
addElement["name"] = @"PHP-FastCGI";
addElement["path"] = @"*.php";
addElement["verb"] = @"GET,HEAD,POST";
addElement["modules"] = @"FastCgiModule";
addElement["scriptProcessor"] = @"c:\php\php-cgi.exe";
addElement["resourceType"] = @"Either";
handlersCollection.AddAt(0, addElement);
serverManager.CommitChanges();
}
}
}
VB.NET
Imports System
Imports System.Text
Imports Microsoft.Web.Administration
Module Sample
Sub Main()
Dim serverManager As ServerManager = New ServerManager
Dim appHostConfig As Configuration = serverManager.GetApplicationHostConfiguration
Dim fastCgiSection As ConfigurationSection = appHostConfig.GetSection("system.webServer/fastCgi")
Dim fastCgiCollection As ConfigurationElementCollection = fastCgiSection.GetCollection
Dim applicationElement As ConfigurationElement = fastCgiCollection.CreateElement("application")
applicationElement("fullPath") = "c:\php\php-cgi.exe"
fastCgiCollection.Add(applicationElement)
Dim webConfig As Configuration = serverManager.GetWebConfiguration("Contoso")
Dim handlersSection As ConfigurationSection = webConfig.GetSection("system.webServer/handlers")
Dim handlersCollection As ConfigurationElementCollection = handlersSection.GetCollection
Dim addElement As ConfigurationElement = handlersCollection.CreateElement("add")
addElement("name") = "PHP-FastCGI"
addElement("path") = "*.php"
addElement("verb") = "GET,HEAD,POST"
addElement("modules") = "FastCgiModule"
addElement("scriptProcessor") = "c:\php\php-cgi.exe"
addElement("resourceType") = "Either"
handlersCollection.AddAt(0, addElement)
serverManager.CommitChanges()
End Sub
End Module
JavaScript
var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var fastCgiSection = adminManager.GetAdminSection("system.webServer/fastCgi", "MACHINE/WEBROOT/APPHOST");
var fastCgiCollection = fastCgiSection.Collection;
var applicationElement = fastCgiCollection.CreateNewElement("application");
applicationElement.Properties.Item("fullPath").Value = "c:\\php\\php-cgi.exe";
fastCgiCollection.AddElement(applicationElement);
adminManager.CommitChanges();
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST/Contoso";
var handlersSection = adminManager.GetAdminSection("system.webServer/handlers", "MACHINE/WEBROOT/APPHOST/Contoso");
var handlersCollection = handlersSection.Collection;
var addElement = handlersCollection.CreateNewElement("add");
addElement.Properties.Item("name").Value = "PHP-FastCGI";
addElement.Properties.Item("path").Value = "*.php";
addElement.Properties.Item("verb").Value = "GET,HEAD,POST";
addElement.Properties.Item("modules").Value = "FastCgiModule";
addElement.Properties.Item("scriptProcessor").Value = "c:\\php\\php-cgi.exe";
addElement.Properties.Item("resourceType").Value = "Either";
handlersCollection.AddElement(addElement, 0);
adminManager.CommitChanges();
VBScript
Set adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set fastCgiSection = adminManager.GetAdminSection("system.webServer/fastCgi", "MACHINE/WEBROOT/APPHOST")
Set fastCgiCollection = fastCgiSection.Collection
Set applicationElement = fastCgiCollection.CreateNewElement("application")
applicationElement.Properties.Item("fullPath").Value = "c:\php\php-cgi.exe"
fastCgiCollection.AddElement applicationElement
adminManager.CommitChanges()
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST/Contoso"
Set handlersSection = adminManager.GetAdminSection("system.webServer/handlers", "MACHINE/WEBROOT/APPHOST/Contoso")
Set handlersCollection = handlersSection.Collection
Set addElement = handlersCollection.CreateNewElement("add")
addElement.Properties.Item("name").Value = "PHP-FastCGI"
addElement.Properties.Item("path").Value = "*.php"
addElement.Properties.Item("verb").Value = "GET,HEAD,POST"
addElement.Properties.Item("modules").Value = "FastCgiModule"
addElement.Properties.Item("scriptProcessor").Value = "c:\php\php-cgi.exe"
addElement.Properties.Item("resourceType").Value = "Either"
handlersCollection.AddElement addElement, 0
adminManager.CommitChanges()