Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

System.Web.HttpRuntime.UnloadAppDomain();

Подробнее

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

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

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

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);
        }
    }
}

Ответ 7

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