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하는 방법을 구현 해보았습니다.

ASP.NET 2014. 1. 19. 00:38

SignalR을 이용한 웹과 네이티브 어플리케이션간 채팅 구현

몇일 전 부터 SignalR에 꽂혀서 조금씩 공부를 하기 시작 했습니다.

좀 아쉬운 점은 서버를 구현하기 위해서는 닷넷 프레임워크 4.5 이상이 되어야 합니다. 즉, Visual Studio2012이상에서 개발 하셔야 합니다. 2014년도 인데 이제 갈아 탈만도 하죠; 회사에서 아직까지 2010을 사용하는 제가 구식일지도;;


1. 서버 구현하기

Step by step으로 구현하겠습니다.


빈 웹 프로젝트를 만들어 줍니다.

첫째로 nuget으로 SignalR을 검색해서 패키지를 추가해 줍니다.

nuget이 없으시다면 설치를 추천드립니다. 만약 하기 싫으시다면 도구 -> 라이브러리 패키지 관리자 -> 패키지 과리자 콘솔 로 들어가 install-package Microsoft.AspNet.SignalR 을 실행합니다.

여기까지 정상적으로 완료가 되면 SignalR관련 라이브러리와 자바스크립트 파일들이 설치가 됩니다.


두번째로 Startup을 구현해줍니다. Startup은 클라이언트와 서버의 접속점을 설정해주는 역할을 합니다.

솔루션 탐색기 -> 프로젝트 에서 오른쪽버튼 -> 추가 -> 클래스 실행합니다. Startup.cs파일을 만들고 아래와 같이 구현해줍니다.


보시면 아시겠지만 그리 복잡하지 않습니다.

정확히 내부 로직이 어떻게 되는지는 몰라 설명을 못드려 죄송합니다.


다음은 메시지를 받아서 모든 유저들에게 전송하는 Method를 구현하겠습니다. 

솔루션 탐색기 -> 프로젝트에서 오른쪽 버튼 -> 추가 -> 클래스 실행합니다. ChatHub.cs파일을 만들고 아래와 같이 구현합니다.


클래스 선언부에 HubName Attribute를 추가해줍니다. 이 HubName을 외부에서 이 메소드를 찾아가는데 필요한 역할을 해줍니다.

Line 15 에서 Clients는 서버에 접속한 모든 ClientContext들의 모음 입니다. All은 모든 Client를 의미하고 인텔리센스로 검색해보면 Caller라고도 나옵니다. Caller는 의미대로 메시지를 보낸 유저를 의미합니다. 위의 소스는 채팅을 받아서 모두에게 보내는 것입니다. 


2. 웹페이지 구현하기

이제 웹페이지를 구현해보겠습니다.

술루션 탐색기 -> 프로젝트에서 오른쪽 버튼 -> html 페이지 추가 실행합니다. index.html을 추가하고 파일의 오른쪽 버튼을 클릭하여 시작페이지로 설정합니다. 그리고 페이지를 아래와 같이 구현합니다.


SignalR을 설치하면 아마도 Visual Studio 버전에 따라 서로 다른 jquery파일이 설치 될 수도 있습니다. Line 22 ~ 23은 설치된 jquery파일을 잘 확인하시고 적어줍니다. 


Line 24는 서버 실행시 SignalR이 스크립트 파일을 만들어 줍니다.


Line 28은 허브에 연결합니다. $.connection.Chat에서 Chat은 ChatHub.cs에 HubName 기억하시죠? 바로 그 HubName으로 해당 클래스를 찾아갑니다.


ChatHub.cs의 Clients.All.broadcastMessage를 호출하면 자바스크립트에서 Line 29의 broadcastMessage가 호출이 됩니다. 즉, 서버에서 클라이언트 메소드를 호출하는 것이죠.


Line 40은 허브 연결이 끝나면 그 아래 코드를 호출하는데 sendmessage를 클릭하면 이름과 메시지가 전송됩니다. 


Line 42의 send는 ChatHub의 Send메소드를 호출하는 코드입니다. 자바스크립트에서 send를 Send로 바꿔서 해보니까 잘 안되었습니다. 소문자로 작성을 하지 서버 메소드가 호출이 잘되는데...그이유를 잘 모르겠습니다.


이렇게 서버의 작업은 모두 끝났으며, F5를 눌러 실행합니다. 

테스트로 Hello라는 텍스트를 입력하고 보냈습니다. 화면에 보여지는 Hello는 서버를 거쳐서 돌아 온 것입니다.


3. Native Application 구현하기

SignalR의 장점은 라이브러리만 잘 활용하면 Native Application에서도 작동합니다. 현재 서버를 IIS서비스로 호스팅을 하고 있지만 독자적인 호스팅도 가능합니다. 이 부분은 다음에 구현해보도록 하겠습니다.

SignalR 클라이언트는 닷넷 프레임워크, iOS, MONO로 구현이 가능하다고 합니다. 추후에는 C++에서도 가능하도록 구현중이며, 아마 자바도 나오지 않을까 싶네요.

콘솔응용 프로그램을 하나 만들어 줍니다. 

그리고 signalr.client를 설치 합니다. 서버와 마찬가지로 nuget에서 검색하거나, 패키지 관리자 콘솔에서 아래와 같이 입력하여 설치합니다.


PM > install-package Microsoft.AspNet.Signalr.client


client 소스가 길지 않으니 먼저 보겠습니다.



Line 14는 서비스 Url을 입력하여 새로운 커넥션을 만들어 줍니다.


Line 15는 HubName을 이용하여 proxy를 생성해 줍니다. HubName은 서버 소스와 마찬가지로 "Chat"이었죠.


Line 16은 Hub연결을 시작하고 연결될때까지 기다립니다. 주의할점은 proxy부터 생성하고 hub연결을 해야 합니다. 그렇지 않으면 오류가 발생합니다.


Line 17은 서버가 수행하는 broadcastMessage라는 클라이언트 메소드를 정의 한 것입니다.


Line 24는 proxy를 통해서 Send라는 서버 메소드를 실행하는 것입니다. 이렇게 준비는 끝났으며, 웹페이지와 네이티브간 채팅을 캡쳐하였습니다.

이렇게 SignalR을 통해서 채팅서버를 구현하였습니다. 

ASP.NET 2014. 1. 18. 01:10

ASP.NET SignalR을 이용한 실시간 양방향 커뮤니케이션 구현

양방향 커뮤니케이션의 새로운 가능성을 보여주는 SignalR입니다. 웹서버 호스팅에서만 되는게 아니라 독립적인 호스팅으로도 서비스가 가능하다는데요. 퍼포먼스 측면에서는 아직 설명이 없지만 충분히 매력적인 기술임에는 틀림 없고, 발표자 말씀과 같이 다양한 곳에 충분히 사용하여도 무방하리만큼 쉽고, 강력합니다.

특히 SQL Server를 이용한 Scale Out은..머..엄청나네요;


1부


2부


출처 : 

http://channel9.msdn.com/Events/TechDays/TechDays-2013-Korea/SignalR-1-2-

http://channel9.msdn.com/Events/TechDays/TechDays-2013-Korea/SignalR-2-2-