Cómo implementar el servidor web HTTP.sys en ASP.Net Core

ASP.Net Core es un marco de código abierto, multiplataforma, ajustado y modular para crear aplicaciones web de alto rendimiento. Kestrel es un servidor web multiplataforma para ASP.Net Core que se incluye de forma predeterminada. Sin embargo, tiene limitaciones.

Para sortear esas limitaciones, le sugiero que utilice HTTP.sys, un servidor HTTP solo para Windows basado en el controlador del kernel HTTP.sys que es más maduro, seguro y escalable.

Por qué debería usar HTTP.sys

Normalmente, necesita HTTP.sys cuando tiene que exponer su servidor al mundo exterior sin IIS (Servicios de información de Internet de Microsoft). Las solicitudes llegan primero al HTTP.sys, construido sobre el controlador del modo Kernel HTTP.sys. HTTP.sys, a su vez, crea una cola y un grupo de aplicaciones individual para cada solicitud en función de la solicitud.

También puede utilizar HTTP.sys cuando necesite una función que no sea compatible con Kestrel. Las características admitidas por HTTP.sys incluyen:

  1. Autenticación de Windows
  2. Zócalos Web
  3. Publicación compartida
  4. HTTPS
  5. Almacenamiento en caché de respuestas
  6. Transmisión directa de archivos

Inicie un proyecto en HTTP.sys

Si está ejecutando Visual Studio 2017, siga estos pasos para crear un proyecto de API web ASP.Net Core:

  1. En el IDE de Visual Studio, elija Archivo> Nuevo> Proyecto.
  2. Seleccione Aplicación web ASP.Net Core (.Net Core) en la lista de plantillas que se muestran.
  3. Especifique UsingHTTPSysInCode como el nombre del proyecto.
  4. Haga clic en Aceptar para guardar el proyecto.
  5. Seleccione API en la ventana Nueva aplicación web .Net Core.
  6. Seleccione la versión de ASP.Net Core que desea usar en el menú desplegable en la parte superior.
  7. Desmarque Habilitar compatibilidad con Docker y seleccione Sin autenticación, porque no usará ninguno de estos aquí.
  8. Haga clic en Aceptar.

Estos pasos crean un nuevo proyecto ASP.Net Core denominado UsingHTTPSysInCode en Visual Studio 2017.

Configurar la aplicación ASP.net Core para HTTP.sys

A continuación, debe instalar los paquetes que necesita. La mejor manera de hacer esto es instalar el metapaquete Microsoft.AspNetCore.All a través del administrador de paquetes NuGet. Esto asegura que todos los paquetes necesarios se instalen de una vez.

Luego abra el archivo Program.cs en su proyecto. Debe tener un aspecto como este:

Programa de clase pública {public static void Main (string [] args) {CreateWebHostBuilder (args) .Build (). Run (); } public static IWebHostBuilder CreateWebHostBuilder (string [] args) => WebHost.CreateDefaultBuilder (args) .UseStartup (); }

Con los paquetes instalados, configure el servidor HTTP.sys a través del método de extensión UseHttpSys de WebHostBuilder en el método Main para la clase Program en el archivo Program.cs. Así es cómo:

public static void Main (string [] args) {CreateWebHostBuilder (args) .Run (); } public static IWebHost CreateWebHostBuilder (string [] args) => WebHost.CreateDefaultBuilder (args) .UseStartup () .UseHttpSys (options => {options.Authentication.Schemes = AuthenticationSchemes.None; options.Authentication.Allow .Anonymous = true MaxConnections = 100; options.MaxRequestBodySize = 1000000; options.UrlPrefixes.Add ("// localhost: 5000");}) .Build ();

Aquí está el código fuente completo de la clase Program:

utilizando Microsoft.AspNetCore; utilizando Microsoft.AspNetCore.Hosting; utilizando Microsoft.AspNetCore.Server.HttpSys; espacio de nombres UsingHTTPSysInCode {Programa de clase pública {principal vacío estático público (cadena [] args) {CreateWebHostBuilder (args) .Run (); } public static IWebHost CreateWebHostBuilder (string [] args) => WebHost.CreateDefaultBuilder (args) .UseStartup () .UseHttpSys (options => {options.Authentication.Schemes = AuthenticationSchemes.None; options.Authentication.Allow .Anonymous = true MaxConnections = 100; options.MaxRequestBodySize = 1000000; options.UrlPrefixes.Add ("// localhost: 5000");}) .Build ();}}

Finalmente, cuando ejecute la aplicación, asegúrese de seleccionar el perfil de inicio de forma adecuada. El perfil de inicio predeterminado es IIS en Visual Studio. Seleccione UsingHTTPSysInCode para este ejemplo; es el mismo que el nombre del proyecto y el espacio de nombres.

Cuando ejecuta la aplicación con el perfil de inicio como UsingHTTPSysInCode, se abre una ventana de consola para mostrar la serie de pasos que se están ejecutando antes de ver la salida del método Get del ValuesController (asumiendo que es su controlador predeterminado) en su navegador web.