ASP.NET 2014. 1. 19. 14:34

ASP.NET SignalR self hosting 구현

SignalR을 이용한 채팅서버 구현하기에서는 서버를 IIS 호스팅 하였습니다. 그러나 굳이 IIS호스팅 할 필요없이 독립적인 자기 호스팅으로 서버를 실행할 수 있습니다. 총 50라인도 안되는 코드로 말이죠. 참고로 이방법은 Web base 방식이 아니어서 저번 처럼 웹페이지 채팅이 불가능합니다. 이 경우 추가 웹 프로젝트를 만들어 주어야 합니다.


가장 먼저 콘솔 어플리케이션 프로젝트를 생성하여 줍니다. 

그리고 SignalR 라이브러리를 패키지 관리자 콜솔을 통해서 설치하여 줍니다.


PM> install-package microsoft.aspnet.signalr.selfhost

PM> Install-Package Microsoft.Owin.Cors


이제 코딩만 하면 됩니다. 

Line22 ~ 29 처럼 먼저 Startup을 만들어 줍니다. Startup은 지난번에도 설명하였듯이 클라이언트와 서버의 접속점을 만들어 주는 역할을 합니다.


Line 31 ~ 38는 ChatHub입니다. 기존에 했던 것과 다를바 없습니다.


Line 12 ~ 19처럼 main 메소드를 구현합니다. uri에서 http://localhost:8080/으로 정의 하였는데, 만약 모든 host에 바인딩을 시켜주려면 uri를 http://*:8080 을 입력해주면 됩니다.


절대참고!

uri가 localhost가 아닐경우 TargetInvocationException 에러가 발생합니다. 이럴 경우 Visual Studio를 관리자 권한으로 재실행 하여야 합니다.


여기까지 구현하면 서비스를 이용할 수 있습니다.


여기에 웹페이지를 추가하여 웹과 Native간 통신이 가능하도록 해보겠습니다.


솔루션 -> 추가 -> 새 프로젝트 -> ASP.NET 빈 웹응용 프로그램을 합니다. 그리고 패키지 관리자 콘솔에서 기본 프로젝트를 새로 추가한 웹프로젝트로 선택 후 아래와 같이 커맨드를 입력합니다.


PM> Install-Package Microsoft.AspNet.SignalR.JS


그리고 index.html을 추가하구요. 소스를 아래와 같이 작성합니다.


기존과 다른점은 Line 24와 Line 28입니다. 

SelfHosting server를 실행하고 html에 접속하면 self hosting된 서버에 접근하게 됩니다. 




위 캡쳐 화면과 같이 좌측 상단은 서버입니다.

좌측 하단은 SignalR 서비스를 이용하는 native client이구요. 우측 하단은 웹페이지 클라이언트입니다.

이렇게 self hostring하는 방법을 구현 해보았습니다.