2008-08-29 4 views
2

J'utilise une DLL native (FastImage.dll) dans un service Web C# ASP.NET qui se verrouille parfois (impossible de le supprimer --- dit accès refusé); cela nécessite d'arrêter IIS pour supprimer la DLL. L'impossibilité de supprimer cette DLL dans le dossier bin de mon service Web publié m'empêche de publier avec succès (même si je pense qu'elle a été publiée avec succès!), Ce qui rend difficile le développement et la correction du bogue (surtout les changements peuvent ne pas être reflétés sur le serveur!). Notez que le bogue provoquant le Web Service à bombarder et verrouiller la DLL est dans mon code, qui est en dehors de ladite DLL, donc je pense que c'est un problème plus général que la bibliothèque FreeImage (pour ne pas leur apporter de chaleur).Exception dans le service Web verrouille DLL et empêche la publication. Solution de contournement?

  1. Est-ce que quelqu'un a déjà ressenti cela? Existe-t-il un moyen de s'assurer que quand il est écrit "Publish a réussi" de l'EDI VS cela veut vraiment dire, ou de lancer un script pour vérifier que les fichiers sont réellement supprimés avant d'essayer de Publier (comme un étape de pré-construction dans VC++). (Maintenant, je supprime manuellement les fichiers avant de publier pour m'assurer que je sais que les DLL ont été remplacées, au lieu d'exécuter les vieilles DLL.C'est toujours un problème, mais si je ne peux pas supprimer la DLL.)
  2. Comment je détecterais si un fichier a été supprimé avec succès d'un fichier séquentiel? (donc je peux arrêter et démarrer IIS s'il échoue)
  3. Est-il possible d'arrêter et de démarrer IIS à partir d'un script (de préférence à partir de l'action Publier ... dans l'EDI VS) et si oui, comment?

Répondre

2

Utilisation de l'outil de ligne de commande IISReset ne redémarre IIS sur la machine locale, et non sur un serveur distant auquel vous publiez. En supposant que vous publiez sur un serveur Windows 2003, je suggère d'essayer l'étape légèrement moins radicale d'arrêter et de redémarrer IIS AppPool dans le site Web ou le dossier virtuel dans lequel le service Web s'exécute. (De cette façon, vous ne prenez pas tous les sites qui s'exécutent sur le serveur cible hors ligne.) Cela suppose également que le service Web s'exécute dans son propre pool d'applications. Idéalement, il devrait le faire, alors gardez-le isolé. Je vous recommande

se éloigner d'utiliser le processus d'édition et de regarder dans un projet de déploiement Web. Voici un article sur le blog de ScottGu détaillant VS 2005 Web Deployment Projects.

L'avantage de l'approche projet de déploiement Web est qu'il vous donne toute la puissance et la capacité de MSBuild, car il est vraiment juste une enveloppe de confort autour MSBuild. Voici un poste de l'équipe MSBuild à propos pre-build and post-build capabilities

Hope this helps.

0

Vous pouvez utiliser l'outil de ligne de commande IISReset pour arrêter/redémarrer iis. Vous pouvez donc écrire un fichier batch simple pour arrêter iis, copier vos fichiers, puis redémarrer iis. Je ne suis pas sûr de savoir comment l'intégrer avec la fonctionnalité de publication VS cependant.

Questions connexes