Ir al contenido
learn

11. Hosting, WebApplication y Kestrel

WebApplication compone configuración, logging, inyección, middleware y endpoints. El generic host posee el ciclo de vida; Kestrel posee el transporte de red.

CreateBuilder carga configuración y servicios. Build congela ese grafo en una aplicación. StartAsync inicia hosted services y servidor; StopAsync inicia el apagado graceful.

El programa enlaza Kestrel a un puerto loopback efímero, llama realmente /health y observa callbacks:

started callback observed: True
GET /health: 200 {"status":"ready"}
graceful stop callbacks observed: stopping=True, stopped=True

Esto prueba la composición del curso, no readiness de producción. Aún hay que declarar límites, timeouts, confianza en forwarded headers, TLS y presupuesto de apagado.

ApplicationStopping pide detener la admisión. El trabajo en vuelo debe terminar dentro del presupuesto o dejar evidencia durable de recuperación. En contenedores, el timeout del host debe caber en el período de gracia del orquestador.

Ventana de terminal
dotnet run --project code/csharp-advanced/Advanced -c Release -- l11

La salida verificada es expected/l11.txt.

  1. Añade un endpoint lento que observe RequestAborted y dispara el apagado.
  2. Fija un límite pequeño de body en Kestrel y prueba justo debajo y encima.
  3. Prueba forwarded headers con un proxy permitido y una petición directa falsificada.
Soluciones
  1. Prueba que la petición entró, llama StopAsync con un token limitado y registra la cancelación observada.
  2. Configura antes de Build, verifica el estado y que el endpoint rechazado no fue invocado.
  3. Declara proxies/redes conocidos; una petición directa no debe elegir su identidad de cliente.