Windows Azure에서 32bit dll 사용하기

Windows Azure는 내부적으로 64bit Windows Server 2008 (R2) 가상화 기반으로 운영이 되고 있습니다. 따라서, 32bit 용으로 컴파일된 dll들은 그대로 사용하시지 못하고, 32bit 호환 모드로 실행을 하셔야 합니다. 참고로 Exe 파일의 경우는 64bit Windows 를 사용해보신 분들은 아시듯이 Wow64 모드로 실행이 되기 때문에 문제가 되지는 않습니다.

   

Windows Azure에서 32bit dll을 사용하기 위해서 exe 파일로 wrapping을 해서 Wow64 모드로 실행을 하는 방법 을 사용하기도 했었는데요, 작년 말부터 Full IIS 기능이 지원되기 시작하면서 64bit 버전 Windows Server 2008에서 IIS7 고급설정에서 32bit 애플리케이션 설정을 True로 해주는 것(아래)을 Startup Task로 적용해 주시면 됩니다.

   

   

Windows Azure의 Full IIS에서는 IIS관련한 설정을 모두 하실 수 있으므로 위와 같은 처리를 하시기 위해서는 아래 작업을 해주시면 됩니다.

   

  1. ServiceDefinition.csdef 파일에 아래 <StartUp> 태그 부분을 추가합니다.(Service 이름이나, WebRole 이름 그리고 cmd 파일의 이름은 임의로 넣었습니다.)

       

    <ServiceDefinition name="jspark32bit" xmlns="https://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">

    <WebRole name="WebRole1">

    ~~~~~~~~~~~~~(중략)~~~~~~~~~~~~~

    <Startup>

    <Task commandLine="enable32bit.cmd" executionContext="elevated" taskType="simple">

    </Task>

    </Startup>

    </WebRole>

    </ServiceDefinition>

       

  2. 아래 내용이 담긴 enable32bit.cmd 같은 파일을 만드셔서 솔루션 탐색기에 해당 WebRole 프로젝트에 추가를 합니다.(단순 script 이므로 메모장으로 만드셔도 됩니다.)

    %windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.enable32BitAppOnWin64:true

   

이제 WebRole을 배포하면 해당 Instance를 원격접속을 통해서 들어가서 확인해보면 32bit 호환모드로 동작하는 것을 확인할 수 있습니다. 이 방법은 64bit로 컴파일 하기 어려운 32bit dll이 있는 경우에 구동하는 경우에 용이하며, 장기적으로 보면 64bit 모드로 구동하는 것을 권장 합니다. 아래는 IIS 설정 관련 MSDN 과 IIS 설정 추가 링크.

How to Configure IIS Components in Windows Azure

32-bit Mode Worker Processes