WCF Create Helloworld Service and Client

 유니티3D용 게임을 태국에 서비스하는데 있어서 결제 처리를 위한 요구사항중에 웹서비스 처리를 해야할 일이 생겼습니다. C++만 해오다 작년에 오브젝트C와 자바를 거쳐 유니티3D한다고 C#을 하더니 이젠 웹쪽 개발인 웹서비스를 하게되네요. 개발 언어는 C#이긴 한데 이쪽으론 완전 초보라 부족한 내용이 있겠지만 정리를 해봅니다.


1. WCF?

Visual Studio 2010 공식 팀 블로그 - WCF 카테고리
TAEYO.NET - 유수석님의 WCF 강좌

 개념 정리등이 잘 정리된 강좌가 있어서 링크로 대체합니다. 비주얼 스튜디오 2008과 2010으로 진행된 두 강좌를 참고해서 저는 최신인 2012로 진행한 내용을 정리해볼까합니다.


2. 비주얼 스튜디오 익스프레스 2012 for 웹 설치


 먼저 개발에 필요한 IDE가 있어야겠죠. 웹 개발이므로 비주얼 스튜디오 익스프레스 2012 for 웹을 다운로드하고 설치해야합니다. 기존에 비주얼 스튜디오 2012 익스프레스 for 윈도우 데스크탑 설치과정을 정리한게 있으니 참고하시기 바랍니다.


3. WCF Service 프로젝트 생성


 익스프레스 for 웹을 실행해서 New Project의 Visual C# -> WCF에 있는 WCF Service Application을 생성해줍니다. 저는 HelloworldWcfService라고 만들었습니다.

 WCF Service Application 템플릿으로 자동생성을 한 모습니다. 간단한 Helloworld Service를 만들것이지만 템플릿으로 하다보니 이것저것 using 도 많고 소스도 좀 기네요.


4. Helloworld WCF Service 정의 및 구현

namespace HelloworldWcfService
{
    [ServiceContract]
    public interface IService1
    {
        [OperationContract]
        string FirstWCFMethod();
    }
}
 자동 생성된 소스는 주석을 거시거나 지우시고 IService1.cs 파일에 위와같이 [ServiceContract] 특성을 통해 서비스 계약을 정의합니다. [OperationContract]를 통해 외부에 노출할 메소드도 하나 정의합니다. 인터페이스이므로 이것을 상속받아 구현하는 클래스가 필요하겠죠.

namespace HelloworldWcfService
{
    public class Service1 : IService1
    {
        public string FirstWCFMethod()
        {
            return "WestWood Forever's First WCF Helloworld!";
        }
    }
}
 Service1.svc.cs 파일입니다. 역시 기존 내용은 주석하시고 IService1을 상속받아 실제 구현하는 위 내용을 추가합니다. 간단하게 string을 리턴시켜줍니다.


5. WCF Service Hosting

 WCF 호스팅은 보편적인 IIS를 사용하거나 Windows Service 또는 윈폼, 콘솔 어플리케이션등을 이용해서 가능한 듯합니다. 저는 WCF 초보이기 때문에 그냥 바로 IIS Express를 통해서 호스팅을 해보겠습니다.

 IIS를 가지고 하지 않을 때는 ServiceHost 객체를 이용해서 서비스를 호스팅 할 수 있습니다. 지금 정리하는것은 IIS 익스프레스를 사용하므로 ServiceHost 객체를 사용하는 내용은 위 링크를 참고하시면 될 듯합니다. 나중에 따로 정리할 일이 생기면 그 때 정리를 해보도록 하겠습니다.

 간단히 개발중인 WCF Service를 F5를 눌러 빌드 후 디버그로 실행하면 IIS Express가 자동으로 실행되면서 위와같이 localhost:포트 로 자동으로 뜨게됩니다. 포트는 임의로 자주 바뀌는것 같네요.

 Service1.svc를 누르면 서비스를 테스트할 수 있는 클라이언트를 만드는 방법에 대한 페이지가 나옵니다.

 작업표시줄에 IIS Express가 이런식으로 실행중입니다.


6. Create Console Application Client

 WCF 서비스를 만들었으니 이제 서비스를 이용할 클라이언트를 만들어보겠습니다.

 C# 콘솔 어플리케이션을 만들어 테스트를 할 것이므로 비주얼 스튜디오 익스프레스 2012 for 윈도우 데스크탑으로 위와같이 Console Application을 만들어줍니다. 저는 WCFConsoleApplication이라고 만들었습니다.


7. Add Service Reference

 서비스 참조를 추가하는 방법은 2가지가 있는 것 같습니다. 수동?으로 Svcutil을 활용해서 Client 객체 소스를 자동 생성을 한 후 참조하는 방법과 비주얼 스튜디오에서 지원하는 Add Service Reference 메뉴를 통해 쉽게 참조하는 방법으로 말이죠. 수동으로하는 방식은 System.ServiceModel 어셈블리 레퍼런스를 추가해주거나 App.config를 직접 수정해줘야하는 이슈가 있고 이미 저는 한번 정리를 했던 것들이라 여기서는 자동으로 쉽게 참조하는 것을 정리해봅니다.

 진행중인 클라이언트 프로젝트에 마우스 우클릭 또는 Project 메뉴의 Add Service Reference 메뉴를 클릭합니다.

 Address: 부분에 위에서 IIS Express로 띄운 서비스의 주소를 기입하고 Go 를 클릭하면 만들었던 서비스를 찾게 됩니다. 물론 IIS Express 서비스를 실행중이어야 합니다. Namespace에는 소속될 네임스페이스를 임의로 지정하면 됩니다.

 OK를 눌러 적용시키면 위와같이 Service References 폴더 밑에 진행중인 프로젝트명.네임스페이스명으로 추가된 것을 볼 수 있습니다. 서비스 만들 때 구현했던 메소드인 FirstWCFMethod() 도 보입니다. 또한 필요한 System.ServiceModel 레퍼런스도 자동으로 추가가되고 App.config에 자동으로 bind, contract, address의 EndPoint 정보도 추가가 됩니다. 이런 자동화 과정은 내부적으로 MEX(Metadata Exchange Endpoint)를 통해서 서비스가 가지고 있는 정보들을 WSDL 형태로 클라이언트가 내려받아 처리되기 때문이라고 합니다. 자세한 것은 역시나 제일 위 링크를 참고하세요.


8. WCF 서비스 호출


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

// WCF 서비스 객체를 사용하기 위해 추가
using WCFConsoleApplication.ServiceReference1;

namespace WCFConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            Service1Client serviceClient = new Service1Client();
            string strResult = serviceClient.FirstWCFMethod();

            Console.WriteLine(strResult);
        }
    }
}
 Program.cs를 위와같이 수정해줍니다.

 WCF Service는 호스팅중 빌드하고 실행해보면 콘솔 어플리케이션에서 웹서비스와 통신해서 string을 받아와 출력한 것을 볼 수 있습니다. 서버의 메소드를 클라이언트에서 로컬 객체처럼 호출해 사용했습니다. 이런걸 RPC라고 하는 것 같네요. 디버그도 편하네요 클라이언트에 브레이크 걸고 하면 서버쪽에 브레이크 포인트가 넘어가서 진행이 되고 다시 돌아오고 이런식이네요. 엄연히 비주얼 스튜디오 띄워놓은게 다른데 말이죠.

 다음에 태국 True Digital Plus와 유니티3D 결제 연동을 적용에 대한 것을 정리할 때 다시한번 WCF에 대해 포스팅이 있을 듯 합니다. C++의 Helloworld와 비교했을때는 좀 내용이 많지만 그래도 간단하게 콘솔 어플과 웹이 통신하는걸 보고 있자니 첨 웹 개발을 해본 입장에서는 신기하네요. 닷넷 프레임워크의 파워를 약간이나마 실감하게 됩니다.

댓글

이 블로그의 인기 게시물

'xxx.exe' 프로그램을 시작할 수 없습니다. 지정된 파일을 찾을 수 없습니다.

goorm IDE에서 node.js 프로젝트로 Hello World Simple Server 만들어 띄워보기

애드센스 수익을 웨스턴 유니온으로 수표대신 현금으로 지급 받아보자.