2016-06-16 1 views
0

Nous rencontrons un problème avec la compilation d'exécution ASP.Net.La compilation de l'environnement d'exécution ASP.Net ne quitte pas la DLL compilée et supprime les fichiers temporaires.

Au démarrage (et après redémarrage) de IIS, les contrôles utilisateur et les mises en page se compilent parfaitement sans aucun problème. Mais à un certain moment au cours du cycle de vie, la compilation de l'exécution s'arrête tout simplement de fonctionner. Un redémarrage du processus IIS le fait fonctionner à nouveau. Après avoir recherché dans une myriade de messages différents, nous avons effectué quelques déboguages ​​supplémentaires, mais nous sommes toujours perplexes quant aux causes de notre problème.

Pour rester dans le droit chemin, je vais sauter en expliquant tous les tests que nous avons effectués, et sauter directement à ce que je crois être le plus proche du cœur de l'erreur.

Nous avons changé notre compilation.tempDirectory en un dossier personnalisé utilisé exclusivement par cette application web, et nous avons défini un procmon pour voir tous les changements de fichiers dans ce dossier. Une fois que l'erreur commence à se produire, nous pouvons voir que les fichiers temporaires sont réellement écrits sur ce lecteur, et csc.exe est démarré (et pendant ce temps, conhost.exe, CcmExec.exe et beaucoup d'autres processus), nous ne voyons aucune erreur dans procmon, mais après l'exécution de csc.exe, il supprime les fichiers temporaires sans quitter les versions compilées. (et l'écran d'erreur asp.net nous montre que csc.exe a échoué, mais pas exactement ce qui a échoué). Les fichiers temporaires sont tous créés (sauf pour la DLL résultante) - .0.cs, .1.cs, .tmp, .cmdline, .out, .err sont tous là pour un court moment. Mais immédiatement après la création, ils sont tous supprimés à nouveau, et l'application ne peut pas les trouver.

Quelqu'un a-t-il une idée de ce qui provoque l'échec de ce processus après un certain temps? Le même fichier compile très bien si nous l'exécutons juste après un redémarrage IIS, mais après un moment il semble que quelque chose pendant la compilation d'exécution échoue, provoquant le processus ASP/w3wp/csc pour supprimer tous les signes des fichiers temporaires, ne créant pas la DLL, et faire échouer la fonctionnalité.

+0

Il est peut-être intéressant de noter que ce serveur a fonctionné pendant plus d'un an, et ce problème n'est survenu que depuis un mois. Bien que cela ne soit pas garanti tous les jours, cela arrive souvent plusieurs fois par jour, ce qui nous oblige à recommencer. Ce serveur est un serveur CM (utilisé uniquement par les éditeurs de contenu), le même code s'exécute sur notre serveur CD qui est beaucoup plus occupé et n'a pas montré de signes de cette erreur. Cependant, notre serveur CM serait plus enclin à l'erreur, car il y a beaucoup plus de contrôles usés qui sont exécutés beaucoup plus rarement, donc la chance qu'ils sont compilés tôt dans le cycle de vie de l'application est moindre. –

Répondre

0

Enfin compris ce qui a causé mon problème.

Nous avons installé un module externe qui exécutait un autre fichier exe tiers pour effectuer certaines optimisations. Exécution de programmes externes, démarre un processus conhost.exe sous l'identité du pool d'applications.

Le deuxième tiers (l'exe) peut dans certains cas échouer en raison de verrous de fichiers, ce qui provoque le blocage de l'exe et du fichier conhost.exe. Une fois que suffisamment de conhost.exe étaient en cours d'exécution, le pool d'applications n'était plus autorisé à en démarrer de nouveaux pour exécuter la compilation d'exécution. Cela a provoqué l'échec de la compilation d'exécution et l'application Web pour nettoyer automatiquement les fichiers temporaires.