요구사항

  • 스탠드 언론으로 실행되는 경량화된 Rest 웹서비스 작성해보고 Akka Actor모듈과 연동을 해보겠습니다.


준비하기

Step0-프로젝트 생성


namespace MicroAKKAWebService
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}


마이크로 웹서비스를 만들기 위해, 빈 어플리케이션을 만드는것입니다. 이것은 MS.VS를 사용하여

완성된 기본 템플릿 asp.net을 만드는것이 아님으로, 웹서비스에 필요한 요소를 하나하나 필요한것만

구성을 할것이며 그것은 경량화되어 배포가느아고 작동될것입니다.

Step1- Owin Host with Nancy 인스톨

Install-Package Microsoft.Owin.Hosting
Install-Package Microsoft.Owin.Host.HttpListener
Install-Package Nancy.Owin

Nuget 설치 관리자로부터, 위 패키지를 설치를 합니다.


Step2- 웹서비스 시작 클래스 작성

using Owin;

namespace MicroAKKAWebService
{    
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.UseNancy();
        }
    }
}
using Microsoft.Owin.Hosting;

namespace MicroAKKAWebService
{
    class Program
    {
        static void Main(string[] args)
        {
            var url = "http://+:8080";

            using (WebApp.Start<Startup>(url))
            {
                Console.WriteLine("Running on {0}", url);
                Console.WriteLine("Press enter to exit");
                Console.ReadLine();
            }
        }
    }
}


콘솔서비스를 실행한후, 웹브라우져에 localhost:8080 접근시 위와같은 화면을 볼수 있으면 성공입니다.

여기까지가, 웹서비스 기본 Empty 프로젝트를 만들었으며 이제 살을 붙여

라우터정의, Get/POST처리등이 가능하도록 기능추가를 해보겠습니다.

 만약 실행이 안되면, +(모든도메인)에 대해 웹서비스를 바인딩할 권한이 없는것이기때문에 
커멘드 콘솔에서 다음과 같은명령어로 허용을 해줍니다.

netsh http add urlacl url=http://+:8080/ user=DOMAIN\username

혹은 VisualStudio를 Admin권한으로 실행하면 됩니다.


Step3- Root(Home) 라우터 설정

using System;
using System.IO;
using System.Threading;
using System.Collections.Generic;
using System.Linq;

using Nancy;
using Nancy.Owin;

namespace MicroAKKAWebService
{
    public class HomeModule : NancyModule
    {
        public HomeModule()
        {
            Get["/"] = x => {
                var env = this.Context.GetOwinEnvironment();

                var requestBody = (Stream)env["owin.RequestBody"];
                var requestHeaders = (IDictionary<string, string[]>)env["owin.RequestHeaders"];
                var requestMethod = (string)env["owin.RequestMethod"];
                var requestPath = (string)env["owin.RequestPath"];
                var requestPathBase = (string)env["owin.RequestPathBase"];
                var requestProtocol = (string)env["owin.RequestProtocol"];
                var requestQueryString = (string)env["owin.RequestQueryString"];
                var requestScheme = (string)env["owin.RequestScheme"];

                var responseBody = (Stream)env["owin.ResponseBody"];
                var responseHeaders = (IDictionary<string, string[]>)env["owin.ResponseHeaders"];

                var owinVersion = (string)env["owin.Version"];
                var cancellationToken = (CancellationToken)env["owin.CallCancelled"];

                var uri = (string)env["owin.RequestScheme"] + "://" + requestHeaders["Host"].First() +
                  (string)env["owin.RequestPathBase"] + (string)env["owin.RequestPath"];

                if (env["owin.RequestQueryString"] != "")
                    uri += "?" + (string)env["owin.RequestQueryString"];

                return string.Format("Hello WebService {0} {1}", requestMethod, uri);
            };
        }
    }
}


마이크로 rest서비스를 위해서 이것만 있으면 충분합니다.


웹소켓및 더 풍부한 기능을 넣고 싶을시 아래를 참고하세요 

Link:  https://github.com/NancyFx/Nancy/wiki/Documentation

Link : https://github.com/biofractal/Nancy-SignalR-Canonical-Chat


Step4-Akka Nuget Install

마지막으로, 우리의 마이크로 웹서비스에 , 필요한 akka를 추가 인스톨을 합니다.







  • No labels