2012-03-23 2 views
0

작업자 역할과 웹 역할 시작 코드에서 모두 사용하는 코드가 있습니다. Worker에서 코드는 Run() 메서드에서 호출됩니다. 웹 역할에서는 Application_Start에서 호출됩니다.Azure 웹 또는 작업자 역할을 결정 하시겠습니까? (대체 : IIS에서 실행 중인지 확인하십시오.)

내가 작업자인지 웹 역할인지에 따라 동작을 약간 변경하고 싶습니다. 이걸 감지 할 수있는 방법이 있습니까? 그렇지 않으면 IIS에서 실행 중인지 검색 할 수 있습니까?

내가 Application_Start에서 실행 중이기 때문에 HttpContext을 확인하는 것이 효과가 없습니다.

+0

웹 및 작업자 상황 모두에서 Run() 메서드를 사용하지 않는 이유가 있습니까? 웹 역할은 IIS가 켜져있는 작업자 역할 일뿐입니다. 패브릭은 여전히 ​​웹 역할에서 모든 RoleEntryPoint (Azure 역할주기) 메소드를 호출합니다. –

+0

@ ChrisJ.T.Auld Run()은 전체 IIS 웹 역할의 동일한 AppDomain에서 실행되지 않습니다. –

+0

가능한 [Azure 역할 유형 (작업자 또는 웹)을 찾을 수 있습니까?] (http://stackoverflow.com/questions/8877461/can-i-find-azure-role-type-worker-or-web) –

답변

1

음,

이 질문은 다시 been asked over하고 있습니다. 내가 생각할 수있는 것은 listing all sites in current role instance (ServerManager 접근법)에 대한 접근법을 사용하는 것입니다. ServerManager에 대한 호출이 실패하거나 사이트가 전혀없는 경우 작업자 역할을 수행합니다. 그렇지 않으면 - 웹 역할. 이 방법이 가장 신뢰할 수있는 방법이라고 생각합니다.

IIS가 작업자 역할에 여전히 존재한다는 것을 잊지 마십시오 (모든 작업자 역할에 대해 RDP를 수행 할 수 있으며 IIS 서버 역할이 있음을 알 수 있음). 그것은 단지 시작되지 않았습니다! 따라서 "기본 웹 사이트"가 여전히있을 수 있습니다 (절대 선택하지 마십시오!).

+3

"반복해서"그러나 당신은 받아 들여지는 응답을 가진 1 개의 질문에 연결한다. 다만 진정하고 구경꾼이 그의 문제를 해결할 것을 도우십시오, 그것에 관하여 멍청이 일 필요 없음 – artfulhacker

0

"WaWorkerHost" 프로세스가 존재하면 작업자 역할이고, 그렇지 않으면 웹 역할입니다. "WaIISHost"을 대신 확인할 수도 있습니다.

bool isWorkerRole = false; 
    foreach (Process proc in Process.GetProcessesByName("WaWorkerHost")) 
    { 
     isWorkerRole = true; 
    }   
관련 문제