2013-05-21 3 views
8

나는 Azure의 기술 세부 사항을 배우면서 젖은 채로 시작하고있다. 어리석은 질문 일 뿐인데 사과한다.webrole onStart() 이벤트와 Application_Start() global.asax 이벤트의 차이점은 무엇입니까?

Visual Studio에서 클라우드 서비스 프로젝트를 만들고 mvc 응용 프로그램에 대해 webrole을 추가하면 mvc 응용 프로그램 내에서 "WebRole.cs"파일을 볼 수 있습니다. 그러나 시작 지점으로 MVC 응용 프로그램을 시작하고 나중에 Azure에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 "Windows Azure 클라우드 서비스 프로젝트 추가"를 선택하면 WebRole.cs가 만들어지지 않습니다.

그래서 WebRole의 시작 이벤트에서 어떤 일이 일어나게 될까요? Global.asax 파일의 Application_Start() 이벤트?

그렇다면 Global.asax의 Application_Start()와 webrole의 onStart() 메소드의 차이점은 무엇입니까? 경우 발생하는, 그래서는 WebRole의 ONSTART 이벤트가 Global.asax에의 위해 Application_Start() 이전에 발생하는 경우라면 What starts first Application_Start or WebRole's OnStart?

:

나는 부분적인 설명을 제공하는 다음과 같은 게시물을 발견했습니다 나중에 Azure 용 앱을 사용할 수있는 프로젝트에서 onStart() 이벤트에 대한 코드를 실행하고 싶습니다.

답변

13

RoleEntryPoint 웹 역할 will run just fine을 확장에는 클래스가 없다, 단지 여분의 코드 대신 OnStart(), Run()OnStop()의 실행되지 않습니다.

Application_Start()은 Azure와 완전히 관련이 없으며 Azure 런타임에서 완전히 무시됩니다. 이는 ASP.NET 배선의 일부일뿐입니다. Application_Start()을 무조건 예외를 던지기 만해도 웹 역할이 시작되는 것을 막을 수는 있지만 모든 HTTP 요청은 실패합니다.

SDK 1.3부터 ​​기본 모드는 RoleEntryPoint 자손을 포함하는 웹 역할 페이로드가 하나의 프로세스 (WaIISHost.exe)에서 실행되고 ASP.NET 코드가 다른 프로세스에서 실행되는 "IIS 모드"입니다. RoleEntryPoint의 프로세스는 먼저 Azure 런타임에 의해 시작되고 OnStart()을 실행하고 무한 루프를 Run()에 입력하면 인스턴스가 HTTP 요청에 대해 열립니다. IIS 7.5를 사용하고 "자동 시작"을 사용하도록 설정 한 경우 Application_Start()이 먼저 실행될 수 있습니다. 그렇지 않으면 첫 번째 요청이 발생할 때까지 Application_Start()이 실행되지 않습니다.

핵심은 코드를 실행하는 두 개의 서로 다른 프로세스가 있으며 각각의 프로세스가 자체 수명을 가지며 응용 프로그램을 디자인하는 방법에 제한이 있다는 것입니다.

자손 클래스는 임의의 이름을 가질 수 있으며 모든 네임 스페이스에 속할 수 있으며 웹 역할의 페이로드로 선택된 프로젝트의 .cs 파일에 있습니다.이 파일은 ASP.NET 프로젝트 일 수 있습니다. 이러한 조건에서 RoleEntryPoint 자손은 Azure 런타임에 위치하며 해당 메소드는 역할 인스턴스 수명의 일부로 실행됩니다.

0

나는이 질문을 오해하고있을 수 있으므로 알려주십시오.

확실히 일반 ASP.NET 프로젝트로 시작한 다음 나중에 Windows Azure 웹 역할에서 실행되도록 변환 할 수 있습니다. WebRole.cs는 기술적으로 필요하지 않습니다. 역할은 역할없이 시작되어야합니다. 그러나 롤 인스턴스의 시작 프로세스의 일부로 일부 논리를 주입하려는 경우 RoleEntryPoint에서 상속 한 WebRole 클래스를 추가하고 OnStart()를 재정의 할 수 있습니다. 여기서 진단 구성, Windows Azure 저장소 테이블 또는 대기열 만들기 등을 할 수 있습니다.

일반적으로 구성/부트 스트랩 논리를 웹 역할의 OnStart() - 플랫폼 별 구성/부트 스트랩에 추가하는 경향이 있습니다.

+1

내가 생각한 것입니다. 클래스를 "WebRole.cs"라고하고 프로젝트의 루트에 있어야합니까? 아니면 RoleEntryPoint에서 상속하는 동안 아무 곳에서나 호출 할 수 있습니까? 제대로 작동하려면 정상적인 webrole의 WebRole.cs 파일 규칙을 따라야한다고 생각합니다. – Steviebob

0

RoleEntryPoint 클래스에서 상속 된 역할에 대해 단일 진입 점 클래스를 가질 수 있습니다. 일반적으로 workerrole.cs 또는 webrole.cs는 이것으로부터 상속됩니다.

RoleEntryPoint에서 상속 된 모든 클래스 이름을 지정할 수 있습니다.

역할이 준비되면이 클래스의 OnStart 이벤트가 시작됩니다. 응용 프로그램이 시작되기 전에 여기에 초기화 논리를 작성할 수 있습니다. IoC 컨테이너 초기화, Windows Azure 진단 구성 등이 될 수 있습니다.

Application_Start 이벤트는 웹 사이트를 처음 방문 할 때 발생합니다. 역할은 이미 준비 상태입니다.

+0

RoleEntryPoint에서 IoC 컨테이너를 구성하고 싶지는 않을 것입니다. 이것은 [별도의 앱 도메인에서 실행됩니다] (http://azure.microsoft.com/blog/2010/12/02/new-full) -i-capabilities-differences-from-hosted-web-core /) ("RoleEntryPoint 및 웹 사이트에서 정적 멤버에 액세스"섹션 참조) 실제로 말할 수는 없습니다. –

+0

다른 프로세스 및 응용 프로그램 도메인에서 실행된다고 언급하지 않습니다. – NStuke