2017년 3월 6일 월요일

C#, SignalR : SignalR 을 SelfHost 방식으로 실행 시키기.

MS 가 제공하는 놀라운 기능 SignalR.

기본적으로 IIS 에서 운용하지만, 그렇게 하지 못하는 경우도 있기 때문에, 자체적으로 실행되는 SelfHost 방식으로도 실행 할 수 있다.

특히나 SignalR 을 실행하려면 Window 2012 Server 이상이 되어야 하는데, 그렇지 못한 경우에 SelfHost 방식을 사용하면 편리하다.


일단 콘솔 응용 프로그램으로 프로젝트를 하나 생성하고.


"도구 > NuGet 패키지 관리자 > 패키지 관리자 콘솔" 로 이동.


패키지 관리자에서 SignalR 관련 패키지들을 설치해 준다.

Install-Package Microsoft.AspNet.SignalR.SelfHost
Install-Package Microsoft.Owin.Cors

이 두개의 패키지를 설치해 준다.

그런 다음 아래의 소스를 등록하고 실행 해주면 끝.


using System;
using Microsoft.AspNet.SignalR;
using Microsoft.Owin.Hosting;
using Owin;
using Microsoft.Owin.Cors;

namespace SignalRSelfHost
{
    class Program
    {
        static void Main(string[] args)
        {
            string url = "http://*:8080";
            using (WebApp.Start<startup>(url))
            {
                Console.WriteLine("Server running on {0}", url);
                Console.ReadLine();
            }
        }
    }

    class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.UseCors(CorsOptions.AllowAll);
            app.MapSignalR();
        }
    }

    public class ServerHub : Hub
    {
        public void Send(string name, string message)
        {
            Clients.All.addMessage(name, message);
        }
    }
}
위 소스의 "ServerHub" 부분이 실제 처리 로직 부분이니 그 부분에 필요한 기능을 구현하면 된다.

그리고 실행 도메인을 "http://*:8080" 으로 해놨는데, 일반적으론 특정 서버의 주소 혹은 아이피가 들어가게 되고, 그러면 지정된 그 서버에서 실행된 경우에만 응답을 하게 된다.

물론 보안상 그렇게 하는게 좋지만, 여기서는 테스트 용이므로 "http://*:8080" 해 놓은것.
이렇게 하면 아무데서나 실행해도 응답을 하게 된다.



암튼 이걸 실행하면 이렇게 서버가 실행이 되고, 이 후로는 일반적인 SignalR 과 동일 하게 사용하면 된다.