2012-03-16 3 views
1

У нас есть несколько веб-приложений в .NET 4.0 (написанных с использованием Visual Studio 2010), которые предварительно скомпилированы и развернуты на рабочих серверах.Развертывание предварительно скомпилированного обновления для веб-приложения .NET?

В настоящее время, когда мы делаем обновление, мы заменяем все существующие файлы обновленными двоичными файлами. Это обновляет приложение, но оно также перезапускает приложение, поэтому все пользователи должны снова войти в систему.

Развернутые двоичные файлы в основном состоят из одного .dll для каждого проекта в моем решении.

Можно ли обновить веб-приложение без прерывания существующих пользователей?

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

ответ

6

Это поддерживается в среде CLR с использованием свойства AppDomainSetup.ShadowCopyFiles. При включении CLR создает копию сборки перед ее загрузкой. Таким образом, только копия заблокирована, а оригинал может быть перезаписан. Эта функция явно разработана для ASP.NET, хоста CLR, который легко перерабатывает AppDomains. Существует отличный MSDN article, который показывает, как вы его настраиваете.

+0

Отлично, спасибо. Так что это не то, что можно просто «включить» в файле web.config, оно должно быть фактически скомпилировано в самом приложении? – cusimar9

+0

Я считаю, что ShadowCopyFiles включен по умолчанию. Поэтому теперь моя проблема заключается в том, что сеанс теряется при обновлении файлов. Это приводит к тому, что мои пользователи будут выходить из системы. Это ожидаемое поведение или нет? – cusimar9

+2

@ cusimar9 - если ваша цель - сохранить сеанс во время обновления приложения, попробовали ли вы режим сеанса StateServer вместо in-proc? Его очень легко включить и использовать, и дополнительное программное обеспечение не требуется (в отличие от режима SqlServer) – avs099

Смежные вопросы