web.config를 수정하는 것 외에 ASP.NET 응용 프로그램을 다시 시작하는 방법

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

  •  03-07-2019
  •  | 
  •  

문제

응용 프로그램 내부에서 web.config를 터치하는 것 외에 ASP.NET 응용 프로그램을 튕기는 권장 방법이 있습니까? ~이다 HttpRuntime.UnloadAppDomain(); 이것을 선호하는 방법은? 그렇다면 어디서이 일을합니까? 신청서의 페이지 또는 다른 장소에서?

도움이 되었습니까?

해결책

이것이 .NET 2.0 이상인 경우 "App_offline.htm"파일을 추가하고 서버에 요청하고 제거한 다음 서버에 다른 요청을 할 수 있습니다.

이 이벤트 시퀀스는 APP_OFFLINE.HTM 파일이 폴더에 존재하는 한 ASP.NET가 응용 프로그램을 언로드하도록합니다.

Scott Guthrie의 블로그 항목 :http://weblogs.asp.net/scottgu/archive/2005/10/06/426755.aspx

다른 팁

응용 프로그램 내부에서 web.config를 터치하는 것은 나쁜 생각입니다. 또한 수정하는 파일을 사용한다는 아이디어는 약간의 해커 니입니다.

문서는 구체적으로 그것을 나타냅니다 UnloadAppDomain 신청서를 종료합니다.

언로드 appdomain을 사용하면 사용하지 않은 응용 프로그램의 프로그래밍 방식 종료가 가능합니다.

응용 프로그램의 어느 곳 에서나이 전화를 걸 수 있어야합니다. 당신은 당신을 얻을 수 있습니다 SecurityException, 따라서 런타임이 적절한 권한을 부여하는지 확인하십시오 (라이브러리에 넣고 전화를 한 다음 GAC에 라이브러리를 입증하여 모든 신뢰를 제공 할 수 있습니다).

이 코드는 저를 위해 작동합니다. 응용 프로그램을 다시로드하려면 호출하십시오.

System.Web.HttpRuntime.UnloadAppDomain();

더 읽으십시오

이 방법은 응용 프로그램을 내릴뿐입니다. 이 메소드를 ASP.NET 웹 버튼에 넣으면 완전히 완료됩니다. 그렇다면 응용 프로그램은 언제 다시로드됩니까? 실제로 버튼을 클릭하면 먼저 메소드 및 언로드 응용 프로그램을 시작합니다. 버튼을 클릭하면 웹 페이지가 새로 고침해야하기 때문에 그 순간에도 켜져있는 웹 페이지에서도 다시로드됩니다. 메소드를 시작한 후 페이지 새로 고침 프로세스로 인해 응용 프로그램도 다시로드됩니다.

앱과 관련된 애플리케이션 풀을 중지하고 시작할 수도 있습니다.

당신은 전화를 통해 이것을 할 수 있습니다 httpruntime.shutdownappdomain 메소드 (개인 정적 메소드이므로 반사를 사용해야합니다).

보다 프로그래밍 방식으로 IIS 작업자 프로세스를 다시 시작하는 방법 (즉, 현재 ASP.NET 도메인을 종료) '재시작'REST API 에서이 방법을 사용하는 방법의 예를 보려면

Application Directory에서 실행 시간에 폴더를 작성하거나 이름을 바꾸어 웹 응용 프로그램을 안전하게 다시 시작할 수 있습니다. 분명히 웹 디렉토리 또는 하위 디렉토리에 대한 응용 프로그램 "수정"권한을 실행하려면 할당 된 사용자에게 제공해야합니다.

이 방법은 다음에 언급되어 있습니다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