Исключение в веб-сервисе блокирует DLL и предотвращает публикацию. Обходной путь? - PullRequest
2 голосов
/ 30 августа 2008

Я использую собственную DLL (FastImage.dll) в веб-службе ASP.NET C #, которая иногда блокируется (не может удалить ее - говорит, что доступ запрещен); это требует остановки IIS для удаления DLL. Невозможность удалить эту DLL в папке bin моей опубликованной веб-службы не позволяет мне успешно опубликовать (даже если она считает, что она была успешно опубликована!), Что затрудняет разработку и исправление ошибки (особенно, когда она просто успешно запускает старый код, так как мой изменения могут не отражаться на сервере!). Обратите внимание, что ошибка, приводящая к тому, что веб-служба бомбит и блокирует библиотеку DLL, находится в моем коде, который находится за пределами упомянутой библиотеки DLL, поэтому я думаю, что это более общая проблема, чем просто библиотека FreeImage (чтобы не дать им никакого тепла).

  1. Кто-нибудь испытывал это?
  2. Есть ли способ убедиться, что когда он говорит "Публикация выполнена успешно" из VS IDE, что это действительно означает, или запустить своего рода скрипт, чтобы проверить, действительно ли файлы удалены, прежде чем он попытается опубликовать (например, шаг предварительной сборки в VC ++). (Прямо сейчас я вручную удаляю файлы перед публикацией, чтобы убедиться, что я знаю, что библиотеки DLL были заменены, вместо того, чтобы запускать старые библиотеки DLL. Это все еще проблема, хотя, если я не могу удалить библиотеку DLL.)
  3. Как определить, был ли файл успешно удален из командного файла? (чтобы я мог остановиться и запустить IIS в случае сбоя)
  4. Можно ли остановить и запустить IIS из сценария (предпочтительно из действия Опубликовать ... в VS IDE) и, если да, то как?

Ответы [ 2 ]

2 голосов
/ 06 сентября 2008

Использование инструмента командной строки IISReset перезапустит IIS только на локальном компьютере, а не на удаленном сервере, на котором вы публикуете.

Предполагая, что вы публикуете на сервере Windows 2003, я бы посоветовал попробовать чуть менее решительный шаг - остановить и перезапустить IIS AppPool на веб-сайте или в виртуальной папке, в которой работает веб-служба. (Таким образом, вы не переводите все сайты, работающие на целевом сервере, в автономный режим.) Это также предполагает, что веб-служба работает в своем собственном пуле приложений. В идеале так и должно быть, поэтому держите его в изоляции.

Я бы порекомендовал уйти от использования процесса публикации и изучить использование проекта веб-развертывания. Вот запись в блоге ScottGu с подробным описанием VS 2005 веб-проектов развертывания .

Преимущество подхода Web Deployment Project состоит в том, что он предоставляет вам всю мощь и возможности MSbuild, поскольку он действительно просто удобная оболочка для MSBuild. Вот сообщение от команды MSBuild о возможностях до и после сборки

Надеюсь, это поможет.

0 голосов
/ 30 августа 2008

Вы можете использовать инструмент командной строки IISReset для остановки / перезапуска iis. Таким образом, вы можете написать простой командный файл, чтобы остановить iis, скопировать файлы, а затем перезапустить iis. Однако я не уверен, как интегрировать это с функцией публикации VS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...