Comment les déploiements de poignée ASP.NET
-
18-09-2019 - |
Question
Je ne ai pu lire que ASP.NET détecte les changements de fichiers spécifiques tels que les fichiers ASPX, DLL et autres. Il redémarre automatiquement, terminer les demandes en cours d'exécution en cours et de nouvelles demandes avec les nouveaux fichiers déployés.
Mais qu'est-ce qui se passe dans le temps du premier fichier copié beeing jusqu'à ce que le dernier a été échangé? Si j'échange le premier fichier DLL, puis une requête arrive, mais les autres fichiers DLL sont dans une version plus ancienne - il va tomber en panne juste? Est-ce que asp.net attendre quelques secondes et ne se démarre nouveau après X secondes de non (pertinent) déposer des modifications?
Thx!
La solution
Vous avez 4 questions ici: Qu'est-ce qui se passe dans le temps du premier fichier beeing copié jusqu'à ce que le dernier a été échangé - Il y a un temps de jeu alors que .net attend de voir si d'autres fichiers ont été modifiés avant qu'il ne démarre le nouveau domaine d'application avec le nouveau chargé dll.
Si j'échange le premier fichier DLL, puis une requête arrive, mais les autres fichiers DLL sont dans une version plus ancienne - se planter juste - Cela dépend de ce changement de code sont les dll . Si le nouveau dll peut fonctionner très bien avec l'ancien code, alors il sera très bien. Mais si le domaine de l'application tourne la nouvelle DLL et que la nouvelle dll dépend de quelque chose qui est pas encore là ... alors oui, il lancera une exception.
asp.net attendre quelques secondes et ne se démarre nouveau après X secondes de aucun changement de fichier (pertinent) - Oui. Je ne l'ai pas été en mesure de trouver combien de temps que le temps est. Mais dans mon expérience personnelle, il est quelque part dans la gamme 1-2 secondes.
J'ai aussi trouvé une bonne explication ici sur le domaine d'application et re-chargement de DLL: http://odetocode.com/Articles/305.aspx
Si vous copiez un dll mis à jour dans un Le sous-répertoire bin de l'application, la runtime ASP.NET reconnaît qu'il est nouveau code à exécuter. depuis ASP.NET ne peuvent pas échanger la dll dans l'actuel AppDomain, il commence une nouvelle AppDomain. L'ancien domaine d'application est « fuite arrêté », qui est, les demandes existantes sont autorisés à terminer l'exécution, et une fois qu'ils sont tous fini la AppDomain peut décharger. Le nouveau AppDomain commence par le nouveau code et commence à prendre toutes les nouvelles demandes.
En général, quand une charge dll dans un processus, le processus verrouille le dll et vous ne pouvez pas écraser le fichier sur le disque. Cependant, AppDomains ont une caractéristique connu sous le nom de cliché instantané qui permet assemblées restent déverrouillées et remplaçable sur le disque.
Le temps d'exécution avec ASP.NET initialise Shadow Copy activé pour le bac annuaire. Le AppDomain copie tout dll dont il a besoin à partir du répertoire bin à un emplacement temporaire avant le verrouillage et le chargement de la DLL en mémoire. Shadow Copy nous permet d'écraser toute dll dans le répertoire bin lors d'une mise à jour sans prendre le web application hors ligne.