mvc - ¿Cómo reiniciar programáticamente la aplicación asp.net core?
forms asp net core (3)
¿Cómo puedo reiniciar una aplicación en el núcleo de asp.net programáticamente?
Quiero borrar el caché y hacer que la aplicación vuelva a entrar en el inicio.
.NET Core 2
Puede llegar un momento en el que desee forzar el reciclaje de su sitio de ASP.Net Core 2 mediante programación. Incluso en los días de MVC / WebForms, esto no era necesariamente una práctica recomendada pero, por desgracia, hay una manera. ASP.Net Core 2 permite la inyección de un objeto IApplicationLifetime que le permitirá hacer algunas cosas útiles. Primero, le permitirá registrar eventos para Inicio, Apagado y Apagado de manera similar a lo que podría haber estado disponible a través de un Global.asax en el pasado. Pero, también expone un método que le permite cerrar el sitio (¡sin un hack!). Tendrá que inyectar esto en su sitio, luego simplemente llámelo. A continuación se muestra un ejemplo de un controlador con una ruta que cerrará un sitio.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
namespace MySite.Controllers
{
public class WebServicesController : Controller
{
private IApplicationLifetime ApplicationLifetime { get; set; }
public WebServicesController(IApplicationLifetime appLifetime)
{
ApplicationLifetime = appLifetime;
}
public async Task ShutdownSite()
{
ApplicationLifetime.StopApplication();
return "Done";
}
}
}
Fuente: http://www.blakepell.com/asp-net-core-ability-to-restart-your-site-programatically-updated-for-2-0
Si necesita esto solo para un escenario de desarrollo, puede usar dnx-watch (para dotnet) o dnx-watch (para dnx).
Si desea que su aplicación se reinicie en producción, entonces tiene que implementar algo similar a lo que hace el observador. Necesita un proceso externo para matar y reiniciar el proceso. O necesitas tu aplicación para lanzar una instancia de sí misma y luego suicidarse. Desafortunadamente, no hay nada fuera de la caja para esto.
Actualización : la respuesta de Mirask es más correcta para .NET Core 2.
En Program.cs verá la llamada a host.Run()
. Este método tiene una sobrecarga que acepta un System.Threading.CancellationToken
. Esto es lo que estoy haciendo:
public class Program {
private static CancellationTokenSource cancelTokenSource = new System.Threading.CancellationTokenSource();
public static void Main(string[] args) {
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run(cancelTokenSource.Token);
}
public static void Shutdown() {
cancelTokenSource.Cancel();
}
}
Luego, en mi controlador puedo llamar a Program.Shutdown()
y luego de unos segundos, la aplicación muere. Si está detrás de IIS, otra solicitud iniciará automáticamente la aplicación.