본문 바로가기

WCF

WCF 서비스로 호스팅하기

http://msdn.microsoft.com/ko-kr/library/ff649818.aspx
 

TCP를 사용하여 Windows 서비스에서 WCF를 호스트 

적용

  • 마이크로 소프트 윈도우 커뮤니케이션 재단 (WCF) 3.5
  • 마이크로 소프트 비주얼 스튜디오 2008

개요

이 방법으로 문서의 내용은 Microsoft Windows 서비스 내에서 WCF 서비스를 호스팅하는 과정을 안내합니다.

내용

목표

  • 간단한 WCF 서비스를 만듭니다.
  • 전송 제어 프로토콜 (TCP)을 사용하여 Windows 서비스에서 WCF 서비스를 호스트.
  • 서비스를 소비하는 간단한 클라이언트를 만듭니다.

개요

WCF 서비스는 수 자체 호스팅 Windows 정품 인증 서비스 (WAS)와 6.0 또는 IIS 7.0에서 인터넷 정보 서비스에서 Windows 서비스 응용 프로그램 (예 : 콘솔 또는 Windows Forms 응용 프로그램 등), (IIS) 인치

Windows 서비스에서 호스팅의 장점은 다음과 같습니다

  • 부팅을 시작합니다 . 호스팅 컴퓨터가 부팅되면 서비스가 자동으로 시작됩니다.
  • 복구 . 오류가있는 경우 서비스가 Windows 서비스 제어 관리자에 의해 다시 시작됩니다.
  • 관리 . 관리자는 이미 Windows 서비스를 관리하는 방법을 알아요.
  • 보안 ID . Windows 서비스 제어 관리자는 프로세스가 실행되는 아래 정체성을 선택할 수 있습니다.
  • 바인딩 유연성 . Windows 서비스에서 호스팅하면 어떤 바인딩 프로토콜을 선택할 수 있습니다. IIS 6.0은 HTTP 바인딩을 허용합니다.

Windows 서비스에서 호스팅의 단점은 다음과 같습니다

  • 설치 . 당신은 사용자 지정 설치 작업이나. NET 유틸리티 Installutil.exe를 사용해야합니다.
  • 엔터 프라이즈 기능의 부족 . 윈도우 서비스 보안, 관리, 확장성 및 IIS에 포함되어있는 관리 기능이 없습니다.

Windows 서비스에서 WCF를 호스트하기 위해, 당신은 WCF 서비스를 만들려면 WCF 서비스를 호스트하는 Windows 서비스를 만든 다음 설치하고 Windows 서비스를 실행해야합니다. 기사에이 방법의 목적을 위해, 당신은 서비스를 설치하려면 명령줄에 installutil.exe를 사용합니다. 프로덕션 환경에서는이 서비스를 설치하려면 설치 프로그램을 사용할 수 있습니다.

단계 요약

  • 1 단계 : WCF 서비스 만들기
  • 2 단계 : TCP를 사용하는 WCF 끝점을 구성하고 기본 주소를 설정
  • 3 단계 : Windows 서비스 만들기
  • 4 단계 : Windows 서비스에 서비스를 추가 설치
  • 5 단계 : WCF 서비스를 호스트하기 위해 Windows 서비스를 수정
  • 6 단계 : Windows 서비스를 설치
  • 7 단계 : Windows Forms의 테스트 클라이언트 응용 프로그램을 만듭니다
  • 8 단계 : 클라이언트에 WCF 서비스 참조 추가를
  • 9 단계 : 테스트 클라이언트와 WCF 서비스

1 단계 : WCF 서비스 만들기

이 단계에서는 Windows 서비스에서 호스팅 테스트를 WCF 서비스를 만듭니다.

  1. Visual Studio에서 클릭하여 파일을 클릭합니다 새로 만들기를 누른 다음을 누릅니다 프로젝트를 .
  2. 에서 새 프로젝트 추가 대화 상자에서 템플릿 섹션 선택 WCF 서비스 라이브러리를 .
  3. 에서 새 프로젝트 추가 대화 상자를 클릭하십시오 확인을 WCF 서비스 라이브러리 프로젝트 WcfServiceLibrary1을 만들 수 있습니다.

2 단계 : TCP를 사용하는 WCF 끝점을 구성하고 기본 주소를 설정

이 단계에서는 종점이 기본 하이퍼 텍스트 전송 프로토콜 (HTTP) 대신 TCP를 사용하도록 WCF 구성을 수정합니다. 그런 다음 서비스에 대한 기본 주소를 설정합니다. 마지막으로, 당신은 설정 httpGetEnabled 에 거짓 은 TCP에서 실행되기 때문에.

  1. WCF 서비스 라이브러리 프로젝트의 App.config 파일을 마우스 오른쪽 단추로 클릭하고 누른 다음 편집 WCF 구성 .

    당신이 편집 WCF 구성 옵션이 표시되지 않는 경우에 도구 메뉴를 클릭 WCF 서비스 구성 편집기를 . 나타나는 WCF 서비스 구성 편집기 도구를 닫습니다. 옵션은 이제 App.config 컨텍스트 메뉴에 나타납니다.

  2. 구성 편집기에서 구성 섹션에서 확장 서비스를 하고 확장 끝점을 .
  3. 첫 번째 종점을 선택합니다. 아래 종점 속성 에서 바인딩 변경 wsHttpBinding 에 netTcpBinding를 .
  4. 두 번째 끝점을 선택합니다. 아래 종점 속성 에서 바인딩 변경 mexHttpBinding 에 mexTcpBinding을 .
  5. 아래 서비스 , 선택한 호스트 , 노드를 아래의 기본 ​​주소를 선택 BaseAddress의 목록을 차례로 클릭하십시오 편집을 .
  6. 다음 기본 주소를 설정하고 다음을 클릭 확인 :
    
    net.tcp : / / 로컬 호스트 : 8523/Service1 
    
    
  7. 에서 고급 , 아래의 트리를 확장 서비스 동작 . 선택 serviceMetadata 변화가 httpGetEnabled 에게 진실에서 거짓 .
  8. 클릭하여 파일을 클릭한 다음 저장 하여 구성 변경 사항을 저장합니다.
  9. Visual Studio에서 구성을 확인하는 다음과 같이 보일 것입니다 :

      <system.serviceModel>
        <services>
          <service behaviorConfiguration="WcfServiceLibrary1.Service1Behavior"
            name="WcfServiceLibrary1.Service1">
            <endpoint address="" binding="netTcpBinding" bindingConfiguration=""
              contract="WcfServiceLibrary1.IService1">
              <identity>
                <dns value="localhost" />
              </identity>
            </endpoint>
            <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration=""
              contract="IMetadataExchange" />
            <host>
              <baseAddresses>
                <add baseAddress="net.tcp://localhost:8523/Service1" />
              </baseAddresses>
            </host>
          </service>
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="WcfServiceLibrary1.Service1Behavior">
              <serviceMetadata httpGetEnabled="false" />
              <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
Ff649818.note (EN - US, PandP.10). GIF참고 :
참고 :
포트 8523 및 Service1에이 예를 들어 임의의 수 있습니다. 당신이 포트가 사용중인 충돌로 실행하면, 그것을 변경합니다. 
당신이 설정하지 않으면 httpGetEnabled 으로 False로 서비스가 시작하려고 할 때, 당신이 이벤트 로그에 예외를 받게됩니다.

3 단계 : Windows 서비스 만들기

이 단계에서는 솔루션에 Windows 서비스 프로젝트를 추가합니다.

  1. 솔루션, cllick 마우스 오른쪽 단추로 누르고 추가를 누른 다음을 누릅니다 새 프로젝트를 .
  2. 에서 새 프로젝트 추가 대화 상자에서 선택한 Windows를 , 다음 선택을 윈도우 서비스 .
  3. 에서 이름 필드의 기본 이름 휴가 WindowsService1을 하고 누른 다음 확인을 Windows 서비스 응용 프로그램을 만들 수 있습니다.
  4. 여러분의 WCF 서비스 라이브러리 프로젝트에서 Windows 서비스 프로젝트에 복사 App.config. WCF 서비스 라이브러리 프로젝트에서 마우스 오른쪽 단추로 누른 다음 App.config , 파일을 클릭 복사를 다음 Windows 서비스 프로젝트를 마우스 오른쪽 단추로 클릭하고을 클릭 붙여넣기 .

4 단계 : Windows 서비스에 서비스를 추가 설치

이 단계에서, 당신은 Windows 서비스에 대한 서비스 설치를 추가합니다.

  1. 마우스 오른쪽 단추로 누른 Service1.cs 다음과 클릭 다음 디자이너보기를 .
  2. 디자이너보기를 마우스 오른쪽 단추로 클릭하고 누른 다음 추가 설치 .

    이것은 추가 ProjectInstaller.cs 두 객체와 파일 serviceProcessInstaller1 및 serviceInstaller1을 .

  3. 의 디자인보기에서 ProjectInstaller.cs 를 마우스 오른쪽 단추로 누른 다음 serviceProcessInstaller1을 하고 누른 다음 속성을 .
  4. 속성 창에서 설정 계정 에 속성을 NetworkService .
  5. 마우스 오른쪽 단추로 누른 serviceInstaller1 하고 누른 다음 속성을 .
  6. 속성 창에서 설정 StartType 에 속성을 자동 .

5 단계 : WCF 서비스를 호스트하기 위해 Windows 서비스를 수정

이 단계에서는 오버 라이드 OnStart () 와 OnStop ()를 윈도우 서비스 프로세스 안에서 시작하여 WCF 서비스를 중지하는 방법을.

  1. 에 대한 참조 추가 System.ServiceModel 하여 Windows 서비스 프로젝트에 있습니다. 이렇게하려면 Windows 서비스 프로젝트에서 마우스 오른쪽 단추로 누른 다음 참조 노드를 클릭한 다음 참조 추가를 . 에서 참조 추가 대화 상자에서 선택 System.ServiceModel을 클릭한 다음 확인 .
  2. 귀하의 Windows 서비스에서 WCF 서비스 라이브러리 프로젝트에 대한 참조를 추가합니다. 이렇게하려면 Windows 서비스 프로젝트에서 마우스 오른쪽 단추로 누른 다음 참조 노드를 클릭한 다음 참조 추가를 . 에서 참조 추가 대화 상자에서 선택한 프로젝트 탭을. WCF 서비스 라이브러리 프로젝트를 선택 WcfServiceLibrary1을 하고 누른 다음 확인 .
  3. 다음과 같은 추가 사용 에 진술을 Service1.cs 하여 Windows 서비스 프로젝트에 파일을 만듭니다.

    using System.ServiceModel;
    using WcfServiceLibrary1;
  4. 선택 Service1.cs를 하고 코드보기로 전환합니다.
  5. 다음과 같이 ServiceHost 형식의 내부 정적 멤버를 선언합니다 :

    internal static ServiceHost myServiceHost = null;
  6. 오버 라이드 OnStart 다음과 같이 서비스 호스트를 열려면 Windows 서비스의 메서드를 :
     

    protected override void OnStart(string[] args)
    {
       if (myServiceHost != null)
       {
           myServiceHost.Close();
       }
       myServiceHost = new ServiceHost(typeof(Service1));
       myServiceHost.Open();
    }
  7. 오버 라이드 OnStop 다음과 같이 서비스 호스트를 닫습니다, Windows 서비스의 메서드를 :

    protected override void OnStop()
    {
       if (myServiceHost != null)
       {
          myServiceHost.Close();
          myServiceHost = null;
       }
    }
  8. 귀하의 Service1.cs는 다음과 같은 있는지 확인합니다 :

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Diagnostics;
    using System.Linq;
    using System.ServiceProcess;
    using System.Text;
    using System.ServiceModel;
    using WcfServiceLibrary1;
    namespace WindowsService1
    {
        public partial class Service1: ServiceBase
        {
            internal static ServiceHost myServiceHost = null;
            public WCFServiceHost1()
            {
                InitializeComponent();
            }
            protected override void OnStart(string[] args)
            {
                if (myServiceHost != null)
                {
                    myServiceHost.Close();
                }
                myServiceHost = new ServiceHost(typeof(Service1));
                myServiceHost.Open();
            }
            protected override void OnStop()
            {
                if (myServiceHost != null)
                {
                    myServiceHost.Close();
                    myServiceHost = null;
                }
            }
        }
    }
  9. 솔루션 탐색기에서 WCF 서비스 프로젝트에서 config 파일이 컴파일 후 두 서비스 바이너리 폴더에되도록 Windows 서비스 프로젝트에 App.config 파일을 복사합니다.
  10. 솔루션을 빌드하고 프로젝트가 생성되었는지 확인 WindowsService1.exe을 프로젝트에서 \ 빈 \ 디버그 여러분의 디렉토리 WindowsService1 프로젝트.

6 단계 : Windows 서비스를 설치

이 단계에서는 Windows 서비스를 설치하고 서비스 콘솔에서 실행합니다.

  1. 솔루션을 다시 빌드하고 Visual Studio를 명령 프롬프트를 엽니다.
  2. WindowsService1.exe이있는 프로젝트의 bin 디렉터리로 이동합니다.
  3. 서비스를 설치하려면 다음 명령을 실행 :

    Installutil WindowsService1.exe
  4. 서비스를 시작합니다. 이렇게하려면를 클릭하십시오 시작, 클릭 , 실행을 입력 services.msc를 누른 다음하고 확인 . 서비스를 마우스 오른쪽 단추로 클릭하고 누른 다음 시작을 .
Ff649818.note (EN - US, PandP.10). GIF참고 :
가 이미 설치된 서비스를 수정한 경우 다음 명령을 사용하여 그것을 제거할 수 있습니다 : Installutil / U WindowsService1.exe을

7 단계 : Windows Forms의 테스트 클라이언트 응용 프로그램을 만듭니다

이 단계에서, 당신은 WCF 서비스를 테스트하는 데 사용할 수있는 Windows Forms 응용 프로그램 이름이 테스트 클라이언트를 만들 수 있습니다.

  1. 솔루션을 마우스 오른쪽 단추로 누르고 추가를 누른 다음을 누릅니다 새 프로젝트를 .
  2. 에서 새 프로젝트 추가 대화 상자에서 템플릿 섹션 선택 Windows 응용 프로그램을 .
  3. 에서 이름 필드에 입력한 다음 테스트 클라이언트 클릭한 다음 확인을 Windows Forms 응용 프로그램을 만들 수 있습니다.

8 단계 : 클라이언트에 WCF 서비스 참조 추가를

이 단계에서는 테스트 클라이언트에서 WCF 서비스에 대한 참조를 추가합니다

  1. 귀하의 마우스 오른쪽 단추로 누른 다음 테스트 클라이언트 프로젝트를 선택 추가 서비스 참조 .
  2. 에서 추가 서비스 참조 대화 상자에서 설정 주소를 클릭하여 다음과 OK

    net.tcp://localhost:8523/Service1
    Ff649818.note (EN - US, PandP.10). GIF참고 :
    net.tcp://localhost:8523/Service1 is the base address that you set in Step 3 above.

9 단계 : 테스트 클라이언트와 WCF 서비스

이 단계에서는 WCF 서비스가 올바르게 실행되고 있는지 확인하기 위해 테스트 클라이언트를 사용합니다.

  1. 고객 프로젝트에서 양식에 버튼 컨트롤을 끕니다.
  2. 기본 코드를 표시 Button 컨트롤을 두 번 클릭합니다. 버튼을 클릭 뒤에있는 코드에서 프록시의 인스턴스를 만들고 호출 GetData 하여 WCF 서비스합니다. 당신이 서비스를 호출하면 현재 사용자의 보안 컨텍스트가 자동으로 WCF 서비스로 전달됩니다. 다음과 같은 코드가 보일 것입니다 :

            private void button1_Click(object sender, EventArgs e)
            {
                ServiceReference1.Service1Client myService = new ServiceReference1.Service1Client();
                MessageBox.Show(myService.GetData(123), “My Service”);
                myService.Close();
            }
  3. 클라이언트 프로젝트를 마우스 오른쪽 단추로 클릭하고 누른 다음 시작 프로젝트로 설정 .
  4. F5 또는 Ctrl + F5를 눌러 클라이언트 응용 프로그램을 실행합니다.

    당신은 양식에 버튼을 클릭하면, 메시지는 "당신이 입력한 : 123"는 나타납니다.

추가 리소스