ASP.NET SignalR 2.0: SignalR 1.x 프로젝트를 2.0으로 업그레이드하기

등록일시: 2014-01-08 08:00,  수정일시: 2014-01-11 00:25
조회수: 5,151
이 문서는 ASP.NET SignalR 기술을 널리 알리고자 하는 개인적인 취지로 제공되는 번역문서입니다. 이 문서에 대한 모든 저작권은 마이크로소프트에 있으며 요청이 있을 경우 언제라도 게시가 중단될 수 있습니다. 번역 내용에 오역이 존재할 수 있고 주석은 번역자 개인의 의견일 뿐이며 마이크로소프트는 이에 관한 어떠한 보장도 하지 않습니다. 번역이 완료된 이후에도 대상 제품 및 기술이 개선되거나 변경됨에 따라 원문의 내용도 변경되거나 보완되었을 수 있으므로 주의하시기 바랍니다.

본문에서는 SignalR 1.x 프로젝트를 SignalR 2.0으로 업그레이드하는 방법과, 업그레이드 과정 중 발생할 수 있는 문제점들을 해결할 수 있는 방법들을 살펴봅니다.

SignalR 2.0은 OWIN을 이용해서 서버 플랫폼 전반에 걸쳐 일관된 개발 경험을 제공해줍니다. 본문에서는 SignalR 1.x 응용 프로그램을 버전 2.0으로 업그레이드하기 위해서 필요한 몇 가지 과정들을 살펴봅니다.

물론, 응용 프로그램을 SignalR 2.0으로 업그레이드 하는 것을 권장하기는 하지만, SignalR 1.x도 계속 지원될 예정이므로 참고하시기 바랍니다.

본문에서는 웹에서 호스트되는 응용 프로그램을 SignalR 2.0으로 업그레이드 하는 방법을 알아봅니다. 이제 SignalR 2.0에서도 자체 호스트(Self-Host) 응용 프로그램이 (콘솔 응용 프로그램이나 Windows 서비스, 또는 기타 프로세스에서 SignalR의 서버 구성 요소가 호스트 되는) 지원됩니다. SignalR 2.0을 자체 호스트 응용 프로그램의 형태로 구현하는 구체적인 방법에 대해서는 ASP.NET SignalR 2.0: 자습서: SignalR 자체-호스트(Self-Host) 문서를 참고하시기 바랍니다.

목차

다음과 같은 절들을 통해서 SignalR 프로젝트를 업그레이드하기 위한 작업들과, 작업 도중 발생할 수 있는 문제점을 해결할 수 있는 방법들을 살펴봅니다.

예제: SignalR 시작하기 자습서의 샘플을 SignalR 2.0으로 업그레이드하기

이번 절에서는 SignalR 1.x 버전의 자습서: SignalR 시작하기 (C#)의 샘플 응용 프로그램을 SignalR 2.0으로 업그레이드 해보겠습니다.

  1. 먼저, SignalR 시작하기 자습서를 완료한 뒤에, 작성된 자습서 샘플 응용 프로그램의 솔루션 탐색기에서 마우스 오른쪽 버튼으로 프로젝트를 클릭하고 속성(Properties) 메뉴를 선택합니다. 그리고, 대상 프레임워크(Target framework).NET Framework 4.5로 설정되어 있는지 확인합니다.

  2. 패키지 관리자 콘솔을 열고, 다음 명령을 입력해서 프로젝트에서 SignalR 1.x를 제거합니다:

    Uninstall-Package Microsoft.AspNet.SignalR -RemoveDependencies
  3. 다시, 다음 명령을 입력해서 SignalR 2.0을 설치합니다:

    Install-Package Microsoft.AspNet.SignalR
  4. HTML 페이지에서 SignalR에 대한 스크립트 참조를 수정해서 새로 프로젝트에 포함된 스크립트의 버전과 일치시킵니다.

    <!--Reference the SignalR library. -->
    <script src="Scripts/jquery.signalR-2.0.0.min.js"></script>

    역주: 2014년 1월 현재 SignalR의 최신 버전은 2.0.1입니다.

  5. 그리고, 전역 응용 프로그램 클래스에서 MapHubs() 메서드 호출을 제거합니다.

    protected void Application_Start(object sender, EventArgs e)
    {
        RouteTable.Routes.MapHubs();
    }
  6. 솔루션 탐색기에서 마우스 오른쪽 버튼으로 프로젝트를 클릭한 다음, 추가(Add)새 항목...(New Item...)을 차례대로 선택합니다. 그리고, 대화 상자에서 OWIN 시작 클래스(OWIN Startup Class)를 선택합니다. 새 클래스의 이름은 Startup.cs로 지정합니다.

  7. Startup.cs 파일의 내용을 다음 코드로 변경합니다:

    using Microsoft.Owin;
    using Owin;
                                    
    [assembly: OwinStartup(typeof(SignalRChat.Startup))]
    namespace SignalRChat
    {
        public class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                app.MapSignalR();
            }
        }
    }

    이 코드에 사용된 어셈블리 어트리뷰트는 해당 클래스를 OWIN의 구동 과정에 추가시켜주는데, 그로 인해서 OWIN이 시작될 때 Configuration 메서드가 실행됩니다. 그리고, 그에 따라 자연스럽게 MapSignalR 메서드가 호출되어 응용 프로그램 내의 모든 SignalR 허브들에 대한 라우트가 생성됩니다.

  8. 프로젝트를 실행하고, 언제나처럼 메인 페이지의 URL을 복사해서 다른 브라우저나 브라우저 패인에 붙여 넣습니다. 그러면, 페이지마다 각각 사용자 이름을 물어보고, 각 페이지에서 전송된 메시지들이 모든 브라우저 패인에 나타나는 것을 확인할 수 있을 것입니다.

업그레이드 도중 발생할 수 있는 오류 해결하기

이번 절에서는 업그레이드 도중 발생할 수 있는 문제점들을 살펴봅니다. SignalR 응용 프로그램에서 발생할 수 있는 보다 전반적인 오류와 문제점들의 목록은 SignalR Troubleshooting에서 확인하실 수 있습니다.

'The call is ambiguous between the following methods or properties'

이 오류는 Microsoft.AspNet.SignalR.Owin 패키지에 대한 참조가 정상적으로 제거되지 않은 경우에 발생합니다. 이 패키지는 폐기될 예정이므로 (Deprecated) 반드시 참조를 제거해야 하며, 1.x 버전의 SelfHost 패키지 역시 제거해야 합니다.

Hub 메서드가 드러나지 않게 실패합니다.

클라이언트 측의 스크립트 참조가 최신 버전인지, Startup 클래스에 적용된 OwinStartup 어트리뷰트가 프로젝트의 올바른 클래스와 어셈블리를 가리키고 있는지 확인해보시기 바랍니다. 참고로, 브라우저에서 직접 허브의 주소(/signalr/hubs)를 열어보면 무엇이 잘못됐는지 오류에 대한 보다 상세한 정보가 제공될 것입니다.