[원문보기]

Auto-Start Web Applications with ASP.NET 4

어떤 웹 응용프로그램들은 사용자들이 요청하기 전에 많은 양의 데이터를 로드하고 값비싼 초기화 과정정이 필요하다. 
오늘 ASP.NET 을 사용하는 개발자들은 종종 이 작업을 응용프로그램 내의 Global.asax 파일 내에 있는 "Application_Start" 이벤트 핸들러를 사용하여 작업해 왔다.
그리고 나서 응용프로그램이 깨어있기위하여 주기적으로 허위 요청을 전송하는 임의 스크립트들을 고안하여 소비자가 요청하기 전에 실행했다. 
응용프로그램에 접근하는 불행한 첫 소비자는 자신의 요청을 처리하기 전에 이 로직이 종료할 때 까지 기다려야 한다.

ASP.NET 4 는 이 시나리오를 향상시키기 위하여 IIS 7.5 상에서 운영될때 사용할 수 있는 "auto-start" 새 기능을 포함하고 있다. ( IIS 7.5는 윈도우즈 7 과 윈도우즈 서버 2008 R2에 설치되어 있다.)
auto-start 기능은 응용프로그램의 워커 프로세스가 시작될 때 제어된 접근을 제공한다.

Auto-Start 기능을 사용하기 위한 ASP.NET 설정 (Configuration an ASP.NET 4 Application to Auto-Start)

이 기능을 사용하기 위해서 먼저 웹서버가 처음 로드될때 응용프로그램이 내부적으로 작동하는 IIS의 "응용프로그램 풀"  워커 프로세스를 설정해야 한다. 당신은 IIS7.5 의 applicationHost.config 파일 ( C:\Windows\System32\inetsvr\config\applicationHost.config ) 을 열어 startMode="AlwaysRunning" 속성에 적절한 <applicationPools> 요소를 추가함으로써 설정할 수 있다. 

<applicationPools>

     <add name="MyAppWorkerProcessmanagedRuntimeVersion="v4.0
          startMode="AlwaysRunning" />

</applicationPools>

당신이 윈도우즈 작업관리자를 띄워 "모든 사용자들의 프로세스 보기 (show processess from all users)" 체크박스를 클릭하고 applicationHost.config 파일을 applicationHost.config 파일의 startMode 를 변경하여 저장한다면 당신은 설정파일이 저장되자 마자 바로 시작된  새로운 "w3wp.exe" 워커 프로세스를 볼 수 있을 것이다.

단일 IIS 응용프로그램 풀 워커 프로세스는 다수의 ASP.NET 응용프로그램들을 호스트할 수 있다. 
워커프로세스가 <application> 설정요소 상의 serviceAutoStartEnabled="true" 요소를 추가를 하면 당신은 자동으로 시작하기를 원하는 각  응용프로그램들을 지정할 수 있다.

<sites>

     <site name="MySite" id="1">

          <application path="/serviceAutoStartEnabled="true
                       serviceAutoStartProvider="PreWarmMyCache
/
>

     </site>

</sites>

<serviceAutoStartProviders>

     <add name="PreWarmMyCachetype="PreWarmCache, MyAssembly" />

</serviceAutoStartProviders>


serviceAutoProvider="PreWarmMyCache" 속성은 응용프로그램에 대한 "warmingup" 로직을 은닉하여 사용되는 커스텀클래스를 설정할 수 있다.
이 클래스는 워커프로세스와 응용프로그램이 외부에서 웹요청을 받기전에 로드되자마자 자동으로 호출되며 초기화 및 캐시 로딩 로직을 실행할 수 있다.

public class PreWarmCache : System.Web.Hosting.IProcessHostPreloadClient {

    public void Preload(string[] parameters) {

        // Perform initialization and cache loading logic here...

    }

}

 IIS 는 "warming up" 로직이 완전히 수행될 때 까지 요청을 수락하지 않는 상태로 응용프로그램을 시작할 것이다. Preload 함수 내에 당신의 초기화 코드가 동작된 후에 ASP.NET 응용프로그램은 웹 요청을 처리할 준비할 것이다.
당신은 auto-start "warming up" 기능과 IIS7 Application Request Routing (ARR) 확장의 로드밸런싱 기능을 선택적으로 조합할 수 있으며 이들을 로그 밸런서에게 응용프로그램을 초기화하고 HTTP 통신 대기하라는  신호를 주기위해서 조합된 것들을 사용할 수 있다.

Posted by hgjung

댓글을 달아 주세요