ASP.NET Core 웹 서버 구현이 WebListenerWebListener web server implementation in ASP.NET Core

Tom DykstraChris RossBy Tom Dykstra and Chris Ross

참고

이 항목은 ASP.NET Core에만 적용 됩니다. 1.x 합니다.This topic applies only to ASP.NET Core 1.x. ASP.NET Core 2.0 WebListener 이름은 HTTP.sys합니다.In ASP.NET Core 2.0, WebListener is named HTTP.sys.

WebListener는는 ASP.NET Core 웹 서버로 windows를 실행 하 합니다.WebListener is a web server for ASP.NET Core that runs only on Windows. 상에 구축 되어는 Http.Sys 커널 모드 드라이버합니다.It's built on the Http.Sys kernel mode driver. WebListener 하지 않아도 됩니다 Kestrel 역방향 프록시 서버와 IIS에 의존 하지 않고 인터넷에 직접 연결에 사용할 수 있습니다.WebListener is an alternative to Kestrel that can be used for direct connection to the Internet without relying on IIS as a reverse proxy server. 사실, WebListener와 호환 되지 않습니다 IIS 또는 IIS Express를 사용할 수 없습니다는 ASP.NET Core 모듈합니다.In fact, WebListener can't be used with IIS or IIS Express, as it isn't compatible with the ASP.NET Core Module.

통해.NET Core 또는.NET Framework 응용 프로그램에서 직접 사용할 수 있지만 WebListener ASP.NET Core에 대 한 개발 된는 Microsoft.Net.Http.Server NuGet 패키지 합니다.Although WebListener was developed for ASP.NET Core, it can be used directly in any .NET Core or .NET Framework application via the Microsoft.Net.Http.Server NuGet package.

WebListener는 다음과 같은 기능을 지원합니다.WebListener supports the following features:

  • Windows 인증Windows Authentication
  • 포트 공유Port sharing
  • SNI https /HTTPS with SNI
  • HTTP/2 tls (Windows 10)HTTP/2 over TLS (Windows 10)
  • 직접 파일 전송Direct file transmission
  • 응답 캐시Response caching
  • Websocket (Windows 8)WebSockets (Windows 8)

지원 되는 Windows 버전:Supported Windows versions:

  • Windows 7 및 Windows Server 2008 R2 이상Windows 7 and Windows Server 2008 R2 and later

보거나 다운로드 샘플 코드 (다운로드 하는 방법을)View or download sample code (how to download)

WebListener를 사용 하는 경우When to use WebListener

WebListener는 IIS를 사용 하지 않고 인터넷에 직접 서버를 노출 해야 하는 배포에 유용 합니다.WebListener is useful for deployments where you need to expose the server directly to the Internet without using IIS.

WebListener는 인터넷과 직접 통신합니다.

Http.Sys를 기반으로 하기 때문에 WebListener 공격 으로부터 보호에 대 한 역방향 프록시 서버를 필요 하지 않습니다.Because it's built on Http.Sys, WebListener doesn't require a reverse proxy server for protection against attacks. Http.Sys는 많은 유형의 공격 으로부터 보호 하 고 견고성, 보안 및의 모든 기능을 갖춘 웹 서버 확장성을 제공 하는 완성도 높은 기술입니다.Http.Sys is mature technology that protects against many kinds of attacks and provides the robustness, security, and scalability of a full-featured web server. 자체 IIS는 HTTP 수신기 Http.Sys 기반으로 실행 됩니다.IIS itself runs as an HTTP listener on top of Http.Sys.

WebListener는 Kestrel를 사용 하 여 가져올 수 없습니다 제공 하는 기능 중 하나 필요할 때 내부 배포에 대 한 적합 한 선택 이기도 합니다.WebListener is also a good choice for internal deployments when you need one of the features it offers that you can't get by using Kestrel.

WebListener는 내부 네트워크와 직접 통신합니다.

WebListener를 사용 하는 방법How to use WebListener

호스트 OS 및 ASP.NET Core 응용 프로그램에 대 한 설치 작업의 개요는 다음과 같습니다.Here's an overview of setup tasks for the host OS and your ASP.NET Core application.

Windows Server를 구성 합니다.Configure Windows Server

  • 버전의 응용 프로그램에 필요한와 같은.NET 설치 .NET Core 또는.NET Framework 4.5.1입니다.Install the version of .NET that your application requires, such as .NET Core or .NET Framework 4.5.1.

  • URL 접두사에 WebListener, 바인딩 및 SSL 인증서를 설정 하려면 미리 등록Preregister URL prefixes to bind to WebListener, and set up SSL certificates

    Windows의 URL 접두사를 미리 등록 하지 않는 경우 관리자 권한으로 응용 프로그램을 실행 해야 합니다.If you don't preregister URL prefixes in Windows, you have to run your application with administrator privileges. 유일한 예외는 HTTP (HTTPS)을 사용 하 여 포트 번호를 1024; 개를 사용 하는 localhost에 바인딩할 경우 이 경우 관리자 권한이 필요 없습니다.The only exception is if you bind to localhost using HTTP (not HTTPS) with a port number greater than 1024; in that case administrator privileges aren't required.

    자세한 내용은 참조 접두사 'asverify' 및 SSL을 구성 하는 방법 이 문서의 뒷부분에 나오는 합니다.For details, see How to preregister prefixes and configure SSL later in this article.

  • WebListener 도달 하는 트래픽을 허용 하도록 방화벽 포트를 엽니다.Open firewall ports to allow traffic to reach WebListener.

    Netsh.exe를 사용할 수 있습니다 또는 PowerShell cmdlet합니다.You can use netsh.exe or PowerShell cmdlets.

또한 Http.Sys 레지스트리 설정합니다.There are also Http.Sys registry settings.

ASP.NET Core 응용 프로그램 구성Configure your ASP.NET Core application

  • NuGet 패키지 설치 Microsoft.AspNetCore.Server.WebListener합니다.Install the NuGet package Microsoft.AspNetCore.Server.WebListener. 도 설치 Microsoft.Net.Http.Server 종속성으로 있습니다.This also installs Microsoft.Net.Http.Server as a dependency.

  • 호출 된 UseWebListener 확장 메서드를 WebHostBuilder 에 프로그램 Main 모든 WebListener를 지정 하는 메서드를 옵션설정 해야 하는 를 다음 예제와 같이:Call the UseWebListener extension method on WebHostBuilder in your Main method, specifying any WebListener options and settings that you need, as shown in the following example:

    public static void Main(string[] args)
    {
        Console.WriteLine("Running demo with WebListener.");
    
        var config = new ConfigurationBuilder()
            .AddCommandLine(args)
            .Build();
    
        var builder = new WebHostBuilder()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseConfiguration(config)
            .UseStartup<Startup>()
            .UseWebListener(options =>
            {
                options.ListenerSettings.Authentication.Schemes = AuthenticationSchemes.None;
                options.ListenerSettings.Authentication.AllowAnonymous = true;
            });
    
        var host = builder.Build();
        host.Run();
    }
    
  • Url 및 포트에서 수신 하도록 구성Configure URLs and ports to listen on

    기본적으로 ASP.NET Core을 바인딩합니다 http://localhost:5000합니다.By default ASP.NET Core binds to http://localhost:5000. URL 접두사와 포트를 구성 하려면 사용할 수 있습니다는 UseURLs 확장 메서드는 urls 명령줄 인수 또는 ASP.NET Core 구성 시스템입니다.To configure URL prefixes and ports, you can use the UseURLs extension method, the urls command-line argument or the ASP.NET Core configuration system. 자세한 내용은 참조 호스팅합니다.For more information, see Hosting.

    수신기 사용 하 여 웹에서 Http.Sys 접두사 문자열 형식은합니다.Web Listener uses the Http.Sys prefix string formats. WebListener 관련이 없는 접두사 문자열 형식 요구 사항이 있습니다.There are no prefix string format requirements that are specific to WebListener.

    참고

    동일한 접두사 문자열을 지정 해야 UseUrls 하는 서버에서 미리 등록 합니다.Make sure that you specify the same prefix strings in UseUrls that you preregister on the server.

  • 응용 프로그램 IIS 또는 IIS Express를 실행 하도록 구성 되지 않은 있는지 확인 합니다.Make sure your application is not configured to run IIS or IIS Express.

    Visual Studio에서 기본 실행 프로필은 IIS Express 합니다.In Visual Studio, the default launch profile is for IIS Express. 콘솔 응용 프로그램 프로젝트를 실행 하려면 수동으로 변경 해야 선택한 프로필을 다음 스크린 샷에 표시 된 것 처럼 합니다.To run the project as a console application you have to manually change the selected profile, as shown in the following screen shot.

    콘솔 응용 프로그램 프로필 선택

ASP.NET Core 외부 WebListener를 사용 하는 방법How to use WebListener outside of ASP.NET Core

또한 Http.Sys 레지스트리 설정합니다.There are also Http.Sys registry settings.

ASP.NET Core 외부에서 WebListener 사용을 보여 주는 코드 샘플은 다음과 같습니다.Here's a code sample that demonstrates WebListener use outside of ASP.NET Core:

var settings = new WebListenerSettings();
settings.UrlPrefixes.Add("http://localhost:8080");

using (WebListener listener = new WebListener(settings))
{
    listener.Start();

    while (true)
    {
        var context = await listener.AcceptAsync();
        byte[] bytes = Encoding.ASCII.GetBytes("Hello World: " + DateTime.Now);
        context.Response.ContentLength = bytes.Length;
        context.Response.ContentType = "text/plain";

        await context.Response.Body.WriteAsync(bytes, 0, bytes.Length);
        context.Dispose();
    }
}

URL 접두사 'asverify' 및 SSL 구성Preregister URL prefixes and configure SSL

IIS와 WebListener 기본 Http.Sys 커널 모드 드라이버 요청을 수신 하 고 초기 처리를 수행 합니다.Both IIS and WebListener rely on the underlying Http.Sys kernel mode driver to listen for requests and do initial processing. Iis에서 관리 UI 제공 모든 항목을 구성 하는 상대적으로 쉬운 방법이 합니다.In IIS, the management UI gives you a relatively easy way to configure everything. 그러나 WebListener를 사용 하 여 Http.Sys를 직접 구성 해야 합니다.However, if you're using WebListener you need to configure Http.Sys yourself. 즉 netsh.exe를 수행 하는 데 사용 되는 기본 제공 도구입니다.The built-in tool for doing that is netsh.exe.

가장 일반적인 작업에 대 한 netsh.exe를 사용 해야는 URL 접두사를 예약 하 고 SSL 인증서를 할당 합니다.The most common tasks you need to use netsh.exe for are reserving URL prefixes and assigning SSL certificates.

NetSh.exe는 초보자를 위한 사용 하기 편리한 도구 않습니다.NetSh.exe is not an easy tool to use for beginners. 다음 예제에서는 포트 80 및 443에 대 한 URL 접두사를 예약 하는 데 필요한 최소한 보여 줍니다.The following example shows the bare minimum needed to reserve URL prefixes for ports 80 and 443:

netsh http add urlacl url=http://+:80/ user=Users
netsh http add urlacl url=https://+:443/ user=Users

다음 예제에는 SSL 인증서를 할당 하는 방법을 보여 줍니다.The following example shows how to assign an SSL certificate:

netsh http add sslcert ipport=0.0.0.0:443 certhash=MyCertHash_Here appid={00000000-0000-0000-0000-000000000000}".

다음은 공식 참조 설명서가입니다.Here is the official reference documentation:

다음 리소스는 여러 시나리오에 대 한 자세한 지침을 제공 합니다.The following resources provide detailed instructions for several scenarios. 참조 하는 문서 HttpListener 에 동일 하 게 적용 WebListener, 둘 다 Http.Sys 기반으로 합니다.Articles that refer to HttpListener apply equally to WebListener, as both are based on Http.Sys.

다음은 netsh.exe 명령줄 보다 쉽게 사용할 수 있는 몇 가지 타사 도구입니다.Here are some third-party tools that can be easier to use than the netsh.exe command line. 제공 되거나 Microsoft에서 보증 되지 이러한 합니다.These are not provided by or endorsed by Microsoft. 도구는 netsh.exe 자체에 대 한 관리자 권한이 필요 하므로 관리자 권한으로 기본적으로 실행 합니다.The tools run as administrator by default, since netsh.exe itself requires administrator privileges.

  • http.sys 관리자 목록에 대 한 UI를 제공 하 고 예약, 접두사 및 인증서 신뢰 목록이 SSL 인증서 및 옵션을 구성 합니다.http.sys Manager provides UI for listing and configuring SSL certificates and options, prefix reservations, and certificate trust lists.
  • HttpConfig 나열 하거나 SSL 인증서와 URL 접두사를 구성할 수 있습니다.HttpConfig lets you list or configure SSL certificates and URL prefixes. UI 관리자 http.sys 보다 성능이 우수 하 고 몇 가지 추가 구성 옵션을 노출 하지만 그렇지 않으면 유사한 기능을 제공 합니다.The UI is more refined than http.sys Manager and exposes a few more configuration options, but otherwise it provides similar functionality. 것 새 인증서 신뢰 목록 (CTL)를 만들 수는 없지만 기존을 할당할 수 있습니다.It cannot create a new certificate trust list (CTL), but can assign existing ones.

자체 서명 된 SSL 인증서를 생성 하기 위한 Microsoft 제공 명령줄 도구: MakeCert.exe 및 PowerShell cmdlet New-selfsignedcertificate합니다.For generating self-signed SSL certificates, Microsoft provides command-line tools: MakeCert.exe and the PowerShell cmdlet New-SelfSignedCertificate. 타사 UI 도구를 자체 서명 된 SSL 인증서를 생성 하기 위해 쉽게 해 주는 있습니다.There are also third-party UI tools that make it easier for you to generate self-signed SSL certificates:

다음 단계Next steps

자세한 내용은 다음 리소스를 참조하세요.For more information, see the following resources: