как перезапустить приложение asp.net помимо изменения web.config

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

  •  03-07-2019
  •  | 
  •  

Вопрос

Есть ли рекомендуемый способ вернуть приложение asp.net, кроме обращения к web.config изнутри приложения?является HttpRuntime.UnloadAppDomain();предпочтительный способ сделать это?и если да, то где вы это делаете?В выгрузке страницы или какого-то другого места приложения?

Это было полезно?

Решение

Если это .NET 2.0 или более поздняя версия, вы можете добавить файл App_offline.htm, сделать запрос на сервер, удалить его, а затем сделать еще один запрос на сервер.

Эта последовательность событий заставит ASP.NET выгрузить приложение, пока файл app_offline.htm существует в папке.

Запись в блоге Скотта Гатри об этом:http://weblogs.asp.net/scottgu/archive/2005/10/06/426755.aspx

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

Касаться web.config изнутри приложения — плохая идея, IMO.Кроме того, идея иметь файл, который вы изменяете, немного банальна, IMO.

В документации конкретно указано, что UnloadAppDomain закроет приложение:

UnloadAppDomain позволяет программно закрывать неиспользуемые приложения.

Вы должны иметь возможность сделать этот вызов в любом месте приложения.Имейте в виду, вы можете получить SecurityException, поэтому убедитесь, что среда выполнения предоставляет вам соответствующие разрешения (возможно, вы захотите поместить это в библиотеку и выполнить вызов, а затем настроить библиотеку в GAC с доказательствами, чтобы предоставить ей полное доверие).

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

System.Web.HttpRuntime.UnloadAppDomain();

Читать далее

Этот метод просто выгрузит наше приложение.Если вы просто поместите этот метод в веб-кнопку ASP.NET, все готово.Так когда же наше приложение будет перезагружено?На самом деле, если вы нажмете кнопку, сначала запустится наш метод и выгрузится приложение.Далее веб-страница, на которой мы находимся в этот момент, также будет перезагружена, потому что мы просто нажали кнопку и веб-страница должна обновиться.После запуска нашего метода процесс обновления страницы также приведет к перезагрузке нашего приложения.

Вы также можете остановить и запустить пул приложений, связанный с приложением.

Вы можете сделать это, позвонив в HttpRuntime.ShutdownAppDomain метод (вам нужно будет использовать отражение, чтобы вызвать его, поскольку это частный статический метод)

Видеть Как перезапустить рабочий процесс IIS программно (т.выключение текущего домена ASP.NET) для примера того, как я использую этот метод в REST API «Перезапуск»

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

метод упоминается вhttp://www.bartlannoeye.be/blog/restarting-a-.net-web-application-without-restarting-iis

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

protected void RestartButton_Click(object sender, EventArgs e)
{
    //restart web app (instead of iisreset)
    DirectoryInfo dir = new DirectoryInfo(Server.MapPath("restart"));
    if (dir.Exists)
    {
        Directory.Move(dir.FullName, dir.FullName + "ed");
    }
    else
    {
        DirectoryInfo dired = new DirectoryInfo(Server.MapPath("restarted"));
        if (dired.Exists)
        {
            Directory.Move(dired.FullName, dir.FullName);
        }
        else
        {
            Directory.CreateDirectory(dir.FullName);
        }
    }
}

Если вы не хотите останавливать и запускать пул приложений, вы всегда можете его перезапустить.

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