2010-05-25 8 views
0

J'ai un processus dans lequel un utilisateur télécharge un fichier sur un site Web où le fichier est ensuite traité et téléchargé dans la base de données. Le processus de validation du fichier peut prendre plusieurs minutes. Dès que le fichier est téléchargé, je crée un nouveau thread et je fais mon traitement sur ce second thread. Cela fonctionne très bien sur ma machine locale mais ne fonctionne pas du tout sur mon serveur de test IIS 7. Après quelques recherches, j'ai trouvé que le problème était que le processus essayait de charger une référence à Castle et qu'il ne pouvait pas trouver la DLL. J'ai une copie de DLL Castle dans ma corbeille et cela fonctionne ailleurs dans mon application. J'ai couru Fuslog et j'ai découvert qu'il essayait de charger le château au mauvais endroit. Il essaie de charger à partir de c:/windows/system32/inetsrv /.L'assembly référencé ne se chargera pas dans le nouveau thread sur IIS 7

Il semble que sous IIS 7, le deuxième thread s'exécute dans un contexte différent ou quelque chose.

Donc la question est ce que je peux faire pour trouver Castle dans le dossier BIN de l'application?

Répondre

0

Je ne suis pas très familier avec IIS mais je suppose que pour une raison quelconque le répertoire de travail a changé. Une possibilité consiste à rétablir le répertoire de travail dans le dossier bin. Une autre possibilité est de s'abonner à l'événement AppDomain.AssemblyResolve qui sera invoqué à tout moment où le CLR ne parvient pas à charger un assembly - dans le gestionnaire d'événements, vous pouvez charger l'assembly à partir de la DLL et le renvoyer.

+0

Vous avez raison. Il semble que IIS 7 peut gérer le thread différemment de IIS 6 et que les threads sont exécutés en dehors du processus des applications Web. Je vais essayer de lancer l'application en mode classique IIS 7 et voir si cela résout mes problèmes. – DanielC

Questions connexes