Creative Commons License

Microsoft .NET

닷넷!시작하기
닷넷! Ver 2.0~
닷넷!스킬업
웹개발
윈폼개발
실용모듈개발
Tip & Tech
하루 한 문법

Microsoft .NET 개발자들을 위한 공간입니다. 기초강의에서 부터 고급 기술 정보 및 팁등을 다루도록 하겠습니다.

.

닷넷! Ver 2.0~

.NET은 순식간(?)에 버전업 되었습니다. 이는 신기술의 탄생도 동반했습니다 .NET 2.0 , .NET 3.0, .NET 3.5 등 새로운 기능 및 확장된 기능에 대해 다룹니다

[WCF] 기본 샘플 (Hello World)

작성자 : 박종명
최초 작성일 : 2008-05-13 (화요일)
최종 수정일 : 2008-05-13 (화요일)
조회 수 : 4214

모든 프로그래밍의 첫 코딩인 Hello World 용 샘플을 제작해 보자.
WCF 프로그래밍을 위한 가장 간단한 샘플부터 시작하여 하나하나 정복해 나가자.
 
다음의 과정으로 WCF 샘플을 만들어 보자

1. WCF 서비스(서버) 제작
    a) Contract 제작 : 서비스로 무엇을 제공할지에 대한 사항을 코딩한다
                                 (여기서는 'Hello WCF' 라는 문자열을 반환할 것이다)
                                 이 과정은 ABC  중 C 에 해당한다
 
    b) Host 제작       : 서비스를 위한 호스트 프로그램을 제작한다.
                                서비스가 될 서버의 주소정보(포트등)등 설정하고 Binding 방법을 명시한다.
                                (여기서는 http 프로토콜을 이용한 기본 통신 방식을 이용할 것이다)
                                이 과정은 ABC 중 AC에 해당한다
 
2. WCF 클라이언트 제작
    WCF 서비스(서버)가 제공하는 서비스를 사용할 클라이언트를 제작한다.
 
 
그럼.. 이제 코딩을 해 보자
 
1. WCF 서비스(서버) 코딩
    a) Contract 제작
        System.ServiceModel 참조하여 ServiceContract 를 만든다
        서비스가 제공하게될 '무엇'을에 해당하는 Contract 를 만들기 위해서는 ServiceContract 어트리뷰트가 적용된
        인터페이스를 먼저 만들어야 한다. 
        그리고 이 인터페이스의 멤버중 서비스로 제공될 메서드에는 OperationContract 어트리뷰트가 적용되어야
        한다. (이 인터페이스가 포함된 어셈블리는 클라이언트에게 공개되어 참조되어질 것이다)
        다음의 코드를 보자      
 
       [ServiceContract]

     public interface IHello

     {

        [OperationContract]

        string HelloWorld();

     }

     IHello 인터페이스가 ServiceContract 로 정의 되었으며 HelloWorld 메서드가
     OperationContract 로 정의되었다.

     다음으로 IHello 를 상속받는 클래스를 정의한다. 이 클래스가 실제 데이터를 제공하는
    클래스
가 된다.
 이 클래스는 ServiceBehavior 클래스라고 하는데 ServiceBehavior 어트리
     뷰트가 적용된 클래스이다.

     다음 코드를 보자.(ServiceContract 를 상속받았기 때문에 묵시적으로 ServiceBehavior 어
     트리뷰트가 적용되었다)

 public class Hello : IHello

     {       

        public string HelloWorld()

        {

            return "Hello, WCF!";

        }

 }

  

   b) 호스트 제작

        IHello 서비스를 외부로 노출하기 위해 호스트를 제작한다. 호스트 방식으로는 IIS,윈도우서비스,콘솔
        프로그램등이 이용될 수 있다.
이번 예제에서는 콘솔 어플리케이션을 이용한 호스트 프로그램을 제작할 것이
          다. System.ServiceModel 과 IHello,Hello 어셈블리를 참조추가 하자. 그리고 난 후 바인딩 정보를 위한
          Config 를 만들어 보자. 콘솔어플리케이션의 App.Config 에 다음 만든다.

         

     <?xml version="1.0" encoding="utf-8" ?>

     <configuration>

       <system.serviceModel>

        <services>

          <service name="HelloWCF.Hello">

          <endpoint address="" binding="basicHttpBinding" contract="IHelloWCF.IHello" />

        </service>

       </services>

      </system.serviceModel>

     </configuration>

          이제 서비스의 시작을 위해 다음과 같이 Main 메서드를 코딩한다.

          static void Main(string[] args)

      {

Type type = typeof(Hello);

string address = "http://localhost:1234/Hello";

            Uri uri = new Uri(address);

            Uri[] us = new Uri[] { uri };

            ServiceHost host = new ServiceHost(type, us);

            host.Open();

 

            Console.WriteLine("시작");

 

            Console.ReadKey();

            host.Close();

      }

      실제 데이터를 제공하는 클래스인 ServiceBehavior 클래스 Hello 에 대한 타입과 Address
      정보를 매개변수로 하여
ServiceHost 를 생성하고 Run(시작) 시킨다.

     

      이렇게 하여 WCF 서비스(서버)가 만들어 졌으며 서비스 시작도 되었다.

      이번엔 이 서비스를 사용할 클라이언트를 제작한다.

2.WCF 클라이언트 제작

  콘솔어플리케이션으로 클라이언트를 만들어 본다.

  일단 WCF 서비스를 사용하기 위해 System.ServiceModel 를 참조하고 위에서 만든 IHello
  어셈블리를 참조한다.
그리고 Config 파일에 다음처럼 작성한다.

  <?xml version="1.0" encoding="utf-8" ?>

  <configuration>

    <system.serviceModel>

      <client>

       <endpoint name="HelloEndpoint" address="http://localhost:1234/Hello" binding="basicHttpBinding" contract="IHelloWCF.IHello" />

      </client>

    </system.serviceModel>

  </configuration>


  이렇게 서버정보를 설정한 후 서비스 사용을 위해 다음처럼 작성한다.

  static void Main(string[] args)

  {

     ChannelFactory<IHelloWCF.IHello> factory = new ChannelFactory<IHelloWCF.IHello>("HelloEndpoint");

     IHelloWCF.IHello hello = factory.CreateChannel();

 

     string msg = hello.HelloWorld();

     Console.WriteLine(msg);

 

     ((IClientChannel)hello).Close();

  }

  Config 파일에 설정된 Endpoing 정보를 기반으로 하여 서버측 객체를 생성하고 메서드를
  호출하고 있다.

== 샘플 실행 화명 ==

서버를 실행하면 다음처럼 서비스가 시작된 화면을 볼 수 있다.



서버를 시작한 채로 클라이언트를 실행하면 다음처럼 Hello, WCF! 라는 문자열이 나타난다.




▒ 정리

이제 정리해 보자.

WCF 서비스를 제작하기 위해서는 ServiceContract 인터페이스를 만들어야 하며 이 인터페이스는 실제 클라이언트에게 제공될 어셈블리이기도 한다. 실제 '무엇'을에 해당하는 클래스는 ServiceBehavior 클래스라고 하는데 이 클래스는 미리 정의된 ServiceContract 인터페이스를 상속받는다. 이렇게 하여 WCF 의 Endpoint 구성요소 중 C 에 해당하는 Contract 가 정의된다.

그리고 나머지 A(Address) , B(Binding) 를 위해 호스트 프로그램을 제작한다. 호스트는 WCF 서비스를 제공하기 위한 호스팅역할을 하는데 IIS,윈도우서비스,콘솔어플리케이션 등으로 만들수 있다.

마지막으로 클라이언트는 WCF 서비스를 이용하기 위해 ServiceContract 인터페이스가 포함된 어셈블리를 참조하고 서비스를 사용하면 된다. 물론 이때 서버연결과 데이터 교환을 위한 ABC 설정을 구성파일(Config)에 설정한다.

다음 그림은 IHello ServiceContract 의 서비스(서버),클라이언트의 ABC 를 매칭시킨 그림이다.



지금까지 순수 날코딩으로 WCF 서비스를 만들어 봤다. 직접 Config 파일의 xml 코드를 직접 코딩하면 알겠지만 매우 귀찮다. MS 에서는 이 Config 를 자동으로 생성해 주는 툴을 제공하는데 우선 서버측 Config 생성을 위해 WCF Service Configuration Editor 라는 유틸리티를 제공하며 클라이언트 Config 를 위해 svcutil 이라는 명령줄 유틸리티를 제공한다

 

※ 이 글에서 사용된 샘플 어플리케이션은 첨부되어 있습니다. 첨부파일을 다운로드 하여 직접 실행하여 참고해 주세요

이름
비밀번호
홈페이지
GH <- 왼쪽의 문자를 오른쪽 박스에 똑같이 입력해 주세요