.Net Core – Tache planifiée avec Hangfire
Hangfire ?
Hangfire est une solution pour intégrer une gestion de taches de fond / planifiées dans des applications .Net et .Net Core. Le stockage est persisté en base de données, le code est open source et l’utilisation commerciale est gratuite.
Je m’en suis servi sur un projet, la prise en main est facile et cela fait le boulot.
Installation
Install-Package Hangfire
Configuration
Dans le fichier Startup.cs
public void ConfigureServices(IServiceCollection services)
{
// Add Hangfire
services.AddHangfire(config =>
config.UseSqlServerStorage(Configuration["ConnectionStrings:DefaultConnection"]));
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
// Configure Hangfire
app.UseHangfireDashboard();
app.UseHangfireServer();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
Restreindre l’accès au tableau de bord
Le tableau de bord permet de suivre l’exécution des taches planifiées mais aussi de les supprimer ou modifier. Il faut donc limiter les accès.
Solution de facilité, la lecture seule. On peut aussi changer l’URL vers le tableau de bord.
app.UseHangfireDashboard("/scheduler", new DashboardOptions
{
IsReadOnlyFunc = (DashboardContext context) => true
});
Solution sécurisée
using Hangfire.Dashboard;
public class AdminAuthorizationFilter : IDashboardAuthorizationFilter
{
public bool Authorize(DashboardContext context)
{
var httpContext = context.GetHttpContext();
return httpContext.User.IsInRole(Constants.Roles.Admin);
}
}
// dans Startup.Configure()
app.UseHangfireDashboard("/hangfire", new DashboardOptions
{
Authorization = new [] { new AdminAuthorizationFilter() }
});
Création d’une tache
La documentation explique clairement comment créer une tache et surtout les différents types de taches possibles :
https://docs.hangfire.io/en/latest/background-methods/index.html
Logging
A partir de Hangfire 1.3.0, il n’y a plus rien à faire si l’application utilise l’une des bibliothèques suivantes (merci la réflexion). L’implémentation du logging est automatiquement choisie en vérifiant la présence des types correspondants en respectant l’ordre suivant :
- Serilog
- NLog
- Log4Net
- EntLib Logging
- Loupe
- Elmah
Références :