11. Hosting, WebApplication y Kestrel
Secciones
Ajustes de lectura
Ninguna voz para este idioma en este navegador.
Más voces
Código y términos técnicos en inglés
Desactivado: la voz de la página lo lee todo, sin pausa entre dos voces.
Ninguna voz para este idioma en este navegador.
Más voces
Más voces: Microsoft Edge ofrece voces naturales en línea, y Windows (Configuración › Hora e idioma › Voz), macOS y Android instalan otras.
WebApplication compone configuración, logging, inyección, middleware y endpoints. El generic host posee el ciclo de vida; Kestrel posee el transporte de red.
Lo que ensambla el builder
Sección titulada «Lo que ensambla el builder»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: TrueGET /health: 200 {"status":"ready"}graceful stop callbacks observed: stopping=True, stopped=TrueEsto 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.
Graceful no significa infinito
Sección titulada «Graceful no significa infinito»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.
Ejecutar la prueba
Sección titulada «Ejecutar la prueba»dotnet run --project code/csharp-advanced/Advanced -c Release -- l11La salida verificada es expected/l11.txt.
Ejercicios
Sección titulada «Ejercicios»- Añade un endpoint lento que observe
RequestAbortedy dispara el apagado. - Fija un límite pequeño de body en Kestrel y prueba justo debajo y encima.
- Prueba forwarded headers con un proxy permitido y una petición directa falsificada.
Soluciones
- Prueba que la petición entró, llama
StopAsynccon un token limitado y registra la cancelación observada. - Configura antes de
Build, verifica el estado y que el endpoint rechazado no fue invocado. - Declara proxies/redes conocidos; una petición directa no debe elegir su identidad de cliente.