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

StackOverflow https://stackoverflow.com/questions/35479

Вопрос

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

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

Решение

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

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

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

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top