2012년 8월 14일 화요일

IIS7.x에서 FluorineFX가 정상적 작동되지 않는 경우

  • 환경 : FluorineFX, Flash Builder 4.5, IIS 7.5
  • 개요 : FluorineFX를 통해서 Server Module을 구성하고 Flash Builder를 통해서 Client Module을 구성하여 IIS 7.5에 Porting을 하면 "BadVersion" 오류가 발생하였다.
  • 증상
    1. FluorineFX에서 제공하는 Sample - FluorineFX v1.0.0.15 installer를 설치하면 생성되는 샘플 코드 (설치폴더\Samples\Flex\Remoting\ArrayCollection) - 을 Visual Studio 2008에서 ASP.NET Development Server를 통해서 실행하면- 즉 Debug을 실행하면 - 정상적으로 구동이 된다.
    2. Visual Studio 2008을 통해서 웹사이트를 게시하여 IIS에서 구동을 하면
      BadVersion 오류가 발생한다
    3. Fiddler를 통해서 Gateway.aspx의 결과 값이 리턴되는 것을 확인해 보면
      - 정상적인 경우 : Content-Type이 "application/x-amf"으로 표시된다.
      - 오류가 있는 경우 : Content-Type이 "text/html"로 표시된다.
  • 원인 분석
    1. 정상적인 경우와 오류가 있는 경우의 Gateway.aspx가 리턴되는 값이 서로 틀린 것을 보고 IIS의 설정 상에 문제가 있는 것으로 짐작을 하게 되었으며 응용프로그램 풀의 설정에서 "관리되는 파이프라인 모드"를 "클래식"으로 바꾸니까 IIS에서도 정상적으로 실행이 되었다.
    2. 포팅된 웹사이트의 응용 프로그램 풀은 "FluorineFX_Test"로 설정을 하였으며
      원인은 FluorineFX_Test의 "관리되는 파이프라인 모드"가 기본적으로 "통합"으로
      설정이 되어 있기 때문이다.
    3. "Managed Pipeline mode"는 "integrated"와 "Classic"으로 설정이 되는데
      IIS 6.0 이전에는 "Classic"으로 관리가 되었다고 한다. Classic으로 관리가 되면
      ASP.NET 페이지는 ISAPI Extension과 ISAPI filters를 통해서 컨트롤이 되는 것으로서 통합 모드를 사용하는 것 보다는 관리상이나 성능상에서 많은 손해를 보게 된다고 한다.
    4. 이전에 만들어진 ASP.Net 프로그램이 IIS 7.x에서 정상적으로 구동이 되지 않는 경우에 "클래식"으로 설정을 하게 되면 정상적으로 작동이 된다. 결과적으로 FluorineFX는 이전에 만들어진 ASP.Net 코드이기 때문에 FluorineFX가 자동으로 생성하는 Web.Config의 내용이 IIS 6.0 이전의 기준에 맞춰져 있기 때문인 것이다.
  • 처리 방안
    1. 첫 번째 방법 : "관리되는 파이프라인 모드"를 "클래식"으로 설정한다.
      => 이렇게 하면 정상적으로 구동이 되기는 하지만 IIS 7.x의 성능을 제대로 활용하지 못하게 된다.
    2. 두 번째 방법 : IIS6 기준의 web.confing를 IIS7 기준으로 migration 한다.
      =>  %systemroot%\system32\inetsrv\APPCMD.EXE migrate config "응용프로그램풀 이름/" (주의할 점 => 응용프로그램풀 이름 뒤에 "/"가 들어가는 것을 주의한다.)
  • web.config의 변화

    migration을 하고 난 이후에 system.webServer/modules 에
    <add name="FluorineGateway" type="FluorineFx.FluorineGateway, FluorineFx" preCondition="managedHandler" /> 이 추가되었다.

댓글 없음:

댓글 쓰기