Почему WAIISHost блокирует определенные файлы

Я развертываю веб-приложение на Azure. Приложение создано с использованием Nancy, и для него не определена RoleEntryPoint (обратите внимание, что это не проблема, сам веб-сайт работает нормально). При развертывании в Azure я включил параметр веб-развертывания.

Когда я пытаюсь запустить веб-развертывание, я получаю следующую ошибку:

Ошибка 7. Сбой задачи веб-развертывания.((26.06.2012 12:28:45 PM) Произошла ошибка при обработке запроса на удаленном компьютере.)

(26.06.2012 12:28:45) Произошла ошибка при обработке запроса на удаленном компьютере. Произошла ошибка при обработке операции «Создать файл» для «Castle.Windsor.dll». Код ошибки был 0x80070020. Процесс не может получить доступ к «E:\approot\bin\Castle.Windsor.dll», поскольку он используется другим процессом.

Я подключился к экземпляру роли RDP и с помощью обозревателя процессов вижу, что WAIISHost имеет блокировку ряда сборок, на которые ссылается мой проект.

Я не смог определить, что вызывает блокировку этих файлов.

спасибо, Джейсон


person Jason    schedule 26.06.2012    source источник


Ответы (1)


Веб-развертывание не предназначено для использования в рабочей среде. (описано здесь)

WaIisHost.exe — это процесс шланга роли для полной веб-роли IIS, поэтому при запуске вашей веб-роли в этом процессе загружается DLL вашей роли. В течение срока службы вашего webrole роль dll загружается в хост-процесс и не может быть изменена. Так как Castle.Windsor.dll находится в папке E:\approot\bin*, где расположены библиотеки DLL, относящиеся к роли, этот двоичный файл загружен в хост-процесс.

Если вы хотите обновить свою веб-роль, вам необходимо выбрать вариант обновления Windows Azure либо с портала, либо с PowerShell.

person AvkashChauhan    schedule 26.06.2012
comment
Я понимаю, что это не для использования в производстве, я просто хочу избежать 20-минутного ожидания, чтобы внести незначительные изменения. Поскольку я не выполняю какой-либо код входа в роль, мне непонятно, почему эти приложения загружаются в approot (в отличие от корня сайта). Что я могу сделать, чтобы этого не произошло. Или есть какой-то другой способ заставить работать веб-развертывание? - person Jason; 26.06.2012
comment
Причина именно в том, что я описал, когда хост роли работает, dll вашей роли загружается в процесс хоста, поэтому вы не можете обновить его, если роль не отключена, и это то, что делает процесс обновления. - person AvkashChauhan; 28.06.2012
comment
Таким образом, кажется, что невозможно обновить лазурную веб-роль с помощью веб-развертывания, я удивлен и разочарован. - person Jason; 03.07.2012