윈도우 애저의 롤이 시작하지 않는 이유

기존 애플리케이션을 윈도우 애저로 옮기는 작업을 하다 보면 간혹 로컬 개발환경에서는 잘 작동하는데 윈도우 애저로 옮기면 롤의 인스턴스가 Busy 상태에 계속 머물거나 Ready 상태로 변하지 않는 경우가 있습니다. 이런 경우에 확인해 봐야할 것에 대해서 포스팅 해봅니다.    

1. 참조하고 있는 어셈블리가 윈도우 애저 가상머신에 존재하지 않는 경우

윈도우 애저에 기본적으로 포함되지 않은 어셈블리 참조를 할 때 비주얼스튜디오에서 'CopyLocal' 속성을 'True'로 설정해 주어야 합니다.

2. 32비트용 어셈블리를 참조하고 있는 경우

윈도우 애저는 64비트의 윈도우서버 2008 의 가상화 기반으로 운영이 되고 있습니다. 32비트 실행파일의 경우는 Wow64 모드를 통해서 호환모드로 작동이 되지만, 32비트로 컴파일된 어셈블리(e.g. DLL파일)는 그대로 동작 할 수 없습니다. 해결 방법은 아래와 같습니다.

해당 어셈블리를 만든 소스코드를 갖고 있다면 64비트용으로 재 컴파일 후에 사용한다.

실행 파일로 래핑해서 호환 모드로 구동되도록 한다.(아래 URL)

https://blogs.msdn.com/b/haniatassi/archive/2009/03/20/using-a-32bit-dll-in-the-windows-azure.aspx

웹 애플리케이션에서 해당 어셈블리를 참조한다면 시작 작업(Startup Task)에서 IIS를 32비트 호환모드로 설정해서 동작시킨다.(아래 URL)
https://blogs.msdn.com/b/jspark/archive/2011/02/10/3windows-azure-32bit-dll.aspx

3. 로컬 개발환경의 저장소를 참조하고 있는 경우

DiagnosticsConnectionString 등이 클라우드의 저장소를 제대로 지정하고 있는지 확인합니다.

   

윈도우애저에서 정상적으로 롤의 인스턴스가 시작되지 않을 경우에는 일정 시간이 지나면 해당 시도를 중지하게 됩니다. 아래는 이와 유사한 문제에 대한 내용을 다룬 링크들 입니다.

   

Troubleshooting Hosted Service Deployment States

Windows Azure Deployment Stuck in Initializing, Busy, Stopping – Why?

Windows Azure deployment – did you forget to pack your DLLs?

Windows Azure: Why is my service not starting?