평가 및 의견을 보내려면 클릭하십시오.
MSDN
MSDN Library
.NET 개발
이전 버전
.NET Framework SDK 2.0
Class Library Reference
System.Net
HttpListener 클래스

  저대역폭 보기 설정
이 페이지에서 다루는 특정 제품:.
Microsoft Visual Studio 2005/.NET Framework 2.0

다음 제품들은 다른 버전에서 다루어 집니다.
.NET Framework 클래스 라이브러리
HttpListener 클래스

참고: 이 클래스는 .NET Framework 버전 2.0에서 새로 추가되었습니다.

프로그래밍 방식으로 제어되는 간단한 HTTP 프로토콜 수신기를 제공합니다. 이 클래스는 상속될 수 없습니다.

네임스페이스: System.Net
어셈블리: System(system.dll)

Visual Basic(선언)
Public NotInheritable Class HttpListener
    Implements IDisposable
Visual Basic(사용법)
Dim instance As HttpListener
C#
public sealed class HttpListener : IDisposable
C++
public ref class HttpListener sealed : IDisposable
J#
public final class HttpListener implements IDisposable
JScript
public final class HttpListener implements IDisposable

HttpListener 클래스를 사용하면 HTTP 요청에 응답하는 간단한 HTTP 프로토콜 수신기를 만들 수 있습니다. 이 수신기는 HttpListener 개체의 수명이 지속되는 동안 작동되며 응용 프로그램 내에서 해당 사용 권한으로 실행됩니다.

Note참고

이 클래스는 Windows XP SP2 또는 Windows Server 2003 운영 체제가 실행되는 컴퓨터에서만 사용할 수 있습니다. 이전 버전의 운영 체제가 실행되는 컴퓨터에서 HttpListener 개체를 만들려고 하면 생성자에서 PlatformNotSupportedException 예외가 throw됩니다.

HttpListener를 사용하려면 HttpListener 생성자를 사용하여 이 클래스의 새 인스턴스를 만든 다음, Prefixes 속성을 사용하여 HttpListener에서 처리해야 할 URI(Uniform Resource Identifier) 접두사를 지정하는 문자열의 컬렉션에 액세스해야 합니다.

URI 접두사 문자열은 URI 체계(http 또는 https), 호스트, 선택적 포트 및 선택적 경로로 구성됩니다. 예를 들어, “http://www.contoso.com:8080/customerData/”는 완전한 접두사 문자열입니다. 접두사는 슬래시(“/”)로 끝나야 합니다. 요청된 URI와 가장 근접하게 일치하는 접두사가 있는 HttpListener 개체가 요청에 응답합니다. 여러 HttpListener 개체가 동일한 접두사를 추가할 수 없습니다. HttpListener에서 이미 사용 중인 접두사를 추가하면 Win32Exception 예외가 throw됩니다.

포트가 지정되어 있으면, 요청된 URI가 어떠한 접두사와도 일치하지 않을 경우 포트로 보낸 요청을 HttpListener에서 받아들일 수 있음을 나타내기 위해 호스트 요소를 “*”로 바꿀 수 있습니다. 예를 들어, 요청된 URI가 HttpListener에서 처리되지 않을 경우 포트 8080으로 보낸 모든 요청을 받으려면 접두사가 “http://*:8080/”이어야 합니다. 마찬가지로, 포트로 보낸 모든 요청을 HttpListener에서 받아들일 수 있도록 지정하려면 “https://+:8080”과 같이 호스트 요소를 “+” 문자로 바꿔야 합니다. “*” 및 “+” 문자는 경로를 포함하는 접두사에 있을 수 있습니다.

클라이언트의 요청에 대한 수신을 시작하려면 컬렉션에 URI 접두사를 추가하고 Start 메서드를 호출합니다. HttpListener에서는 클라이언트 요청을 처리하기 위한 동기 모델과 비동기 모델을 모두 제공합니다. 요청과 이에 대한 응답은 GetContext 메서드나 해당 비동기 메서드인 BeginGetContextEndGetContext 메서드에서 반환되는 HttpListenerContext 개체를 사용하여 액세스할 수 있습니다.

클라이언트 요청을 기다리는 동안 응용 프로그램이 차단되어야 하는 경우와 요청을 한 번에 하나씩만 처리하려는 경우에는 동기 모델이 적합합니다. 동기 모델을 사용하려면 클라이언트가 요청을 보낼 때까지 대기하는 GetContext 메서드를 호출합니다. 이 메서드는 요청이 발생할 때 처리하기 위한 HttpListenerContext 개체를 반환합니다.

보다 복잡한 비동기 모델에서는 요청을 기다리고 각 요청이 자체 실행 스레드에서 처리되는 동안 응용 프로그램이 차단되지 않습니다. 들어오는 각 요청에 대해 호출할 응용 프로그램 정의 메서드를 지정하려면 BeginGetContext 메서드를 사용합니다. 요청을 가져와 처리하고 이에 응답하려면 이 메서드 내에서 EndGetContext 메서드를 호출합니다.

두 모델 모두에서 들어오는 요청은 HttpListenerContext.Request 속성을 사용하여 액세스되고 HttpListenerRequest 개체로 표현됩니다. 마찬가지로 응답은 HttpListenerContext.Response 속성을 사용하여 액세스되고 HttpListenerResponse 개체로 표현됩니다. 이러한 개체는 HttpWebRequestHttpWebResponse 개체와 일부 기능이 같지만 후자의 경우에는 서버가 아닌 클라이언트의 동작을 구현하므로 HttpListener와 함께 사용할 수 없습니다.

HttpListener에서는 클라이언트 인증이 필요할 수 있습니다. 사용할 특정 인증 체계를 지정하거나 사용할 인증 체계를 결정하는 대리자를 지정할 수 있습니다. 인증을 거쳐야 클라이언트의 ID에 대한 정보를 얻을 수 있습니다. 자세한 내용은 User, AuthenticationSchemesAuthenticationSchemeSelectorDelegate 속성을 참조하십시오.

Note참고

https를 사용하여 HttpListener를 만드는 경우 해당 수신기에는 서버 인증서를 선택해야 합니다. 그렇지 않으면 예기치 않게 연결이 닫히면서 이 HttpListenerHttpWebRequest 쿼리가 실패하게 됩니다.

Note참고

HttpCfg.exe를 사용하여 서버 인증서 및 다른 수신기 옵션을 구성할 수 있습니다. 자세한 내용은 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/http/http/httpcfg_exe.asp를 참조하십시오. 이 실행 파일은 Windows Server 2003에서 제공되며, Platform SDK에서 사용할 수 있는 소스 코드를 사용하여 만들 수도 있습니다.

Note참고

HttpListener의 인증 체계를 여러 개 지정하면 수신기는 Negotiate, NTLM, Digest, 및 Basic의 순서로 클라이언트 인증을 요구합니다.

Windows Server 2003 플랫폼 참고: 이 클래스를 사용하는 데 필요합니다.

Windows XP Home Edition, Windows XP Professional x64 Edition, Windows Server 2003 플랫폼 참고: 이 클래스를 사용하는 데 서비스 팩 2 이상이 필요합니다.

다음 코드 예제에서는 HttpListener를 사용하는 방법을 보여 줍니다.

C#
// This example requires the System and System.Net namespaces.
public static void SimpleListenerExample(string[] prefixes)
{
    if (!HttpListener.IsSupported)
    {
        Console.WriteLine ("Windows XP SP2 or Server 2003 is required to use the HttpListener class.");
        return;
    }
    // URI prefixes are required,
    // for example "http://contoso.com:8080/index/".
    if (prefixes == null || prefixes.Length == 0)
      throw new ArgumentException("prefixes");
    
    // Create a listener.
    HttpListener listener = new HttpListener();
    // Add the prefixes.
    foreach (string s in prefixes)
    {
        listener.Prefixes.Add(s);
    }
    listener.Start();
    Console.WriteLine("Listening...");
    // Note: The GetContext method blocks while waiting for a request. 
    HttpListenerContext context = listener.GetContext();
    HttpListenerRequest request = context.Request;
    // Obtain a response object.
    HttpListenerResponse response = context.Response;
    // Construct a response.
    string responseString = "<HTML><BODY> Hello world!</BODY></HTML>";
    byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
    // Get a response stream and write the response to it.
    response.ContentLength64 = buffer.Length;
    System.IO.Stream output = response.OutputStream;
    output.Write(buffer,0,buffer.Length);
    // You must close the output stream.
    output.Close();
    listener.Stop();
}
System.Object
  System.Net.HttpListener
이 형식의 모든 public static(Visual Basic의 경우 Shared) 멤버는 스레드로부터 안전합니다. 인터페이스 멤버는 스레드로부터 안전하지 않습니다.

Windows 98, Windows Server 2003, Windows XP Media Center Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.

.NET Framework

2.0에서 지원
커뮤니티 콘텐츠   커뮤니티 콘텐츠란?
새 콘텐츠 추가 RSS  주석
Processing
© 2009 Microsoft Corporation. All rights reserved. 사용약관  |  상표  |  개인정보보호
Page view tracker