4

Pour pouvoir arrêter le processus d'arrière-plan (implémenté avec Quartz.Net), j'ai besoin de détecter l'arrêt de l'application Web dans AspNet5 beta8. Dans les versions précédentes d'Asp.Net, il était possible d'exécuter du code sur Application_End. Quel est l'équivalent de l'événement Application_End dans AspNet5?Comment détecter l'arrêt de l'application Web dnx451 dans AspNet5/Mvc6?

Jusqu'à présent, j'essayé IApplicatonLifetime dans Configurer, mais il ne se déclenche pas quand j'arrête l'application Web:

public void Configure(IApplicationBuilder app, IApplicationLifetime lifetime) 
{ 
    lifetime.ApplicationStopping.Register(() => 
    { 
     Logger.LogInformation("Application Stopping. Do stuff."); 
    }); 

    lifetime.ApplicationStopped.Register(() => 
    {   
     Logger.LogInformation("Application Stopped. Do stuff."); 
    }); 
} 

Je ne reçois pas de réponse à la fois ApplicationStopping et ApplicationStopped.

Répondre

4

J'ai essayé une ancienne version (beta5) et votre code a bien fonctionné. ApplicationStopping et ApplicationStopped ont été déclenchés lors de l'utilisation d'IIS Express et ont arrêté le site avec élégance.

Il semble qu'il y ait un problème avec ces événements dans IIS après les modifications beta8. Beta8 changed IIS hosting donc il utilise le HttpPlatformHandler pour lancer le processus dnx. Malheureusement, il semble que les événements d'arrêt ne sont pas reçus, voir the issue (Il n'y a pas beaucoup de détails concernant le problème à ce jour).

J'ai essayé beta8 sur ma machine et la question semble limitée à IIS:

  • Lorsque j'utilise IIS Express uniquement: l'événement est tiré ApplicationStarted (Même lors de l'arrêt gracieusement sur le site).
  • Cependant, si je cours dnx web alors les 3 événements sont déclenchés.

Il y a deux façons que vous pouvez exécuter le projet en utilisant la commande DNX:

  • Tell Visual Studio si vous souhaitez exécuter le projet en utilisant IIS Express ou la commande DNX. Il y a un menu déroulant sur le bouton Exécuter:

    Choosing web or IISExpress when running project

  • Ouvrez une fenêtre de commande dans le dossier racine du projet et exécuter dnx web (en supposant web est la commande configurée dans votre fichier project.json).