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

서비스 호스팅

서비스가 활성화되려면, 서비스를 만들고 서비스의 컨텍스트 및 수명을 제어하는 런타임 환경에서 서비스가 호스팅되어야 합니다. WCF(Windows Communication Foundation) 서비스는 관리 코드를 지원하는 Windows 프로세스에서 실행되도록 디자인되었습니다.

WCF는 서비스 기반 응용 프로그램을 만드는 데 사용되는 통합 프로그래밍 모델을 제공합니다. 이 프로그래밍 모델은 일관적이며 서비스가 배포되는 런타임 환경에 독립적입니다. 즉, 서비스 코드는 사실상 서비스 호스팅 옵션에 관계없이 거의 동일합니다.

서비스 호스팅 옵션은 콘솔 응용 프로그램 내에서 실행하는 경우부터 서버 환경에 이르기까지 다양합니다. 서버 환경의 예를 들면 IIS(인터넷 정보 서비스) 또는 WAS(Windows Process Activation Service)에서 관리하는 작업자 프로세스 내에서 실행되는 Windows 서비스가 있습니다. 개발자는 서비스의 배포 요구 사항을 만족하는 호스팅 환경을 선택합니다. 이러한 요구 사항은 응용 프로그램이 배포되는 플랫폼, 메시지를 보내고 받는 데 필요한 전송, 충분한 가용성을 보장하는 데 필요한 프로세스 재활용 유형 및 기타 프로세스 관리 유형, 기타 관리 또는 안정성 요구 사항에 따라 달라집니다. 다음 단원에서는 호스팅 옵션에 대한 정보 및 지침을 제공합니다.

 

호스팅 옵션

관리되는 응용 프로그램에서의 자체 호스팅

WCF 서비스는 관리되는 응용 프로그램에서 호스팅할 수 있습니다. 이 경우 배포하는 데 있어 최소한의 인프라를 필요하므로 가장 유연한 옵션입니다. 관리되는 응용 프로그램 코드 내에 서비스 코드를 포함시킨 다음 서비스를 사용할 수 있도록 ServiceHost의 인스턴스를 만들고 엽니다. 자세한 내용은 방법: 관리되는 응용 프로그램에서 WCF 서비스 호스팅을 참조하십시오.

이 옵션을 사용하면 두 가지 일반적인 호스팅 시나리오가 가능합니다. 하나는 콘솔 응용 프로그램 내에서, 다른 하나는 WPF(Windows Presentation Foundation) 또는 WinForms(Windows Forms)를 기반으로 하는 응용 프로그램과 같은 리치 클라이언트 응용 프로그램 내에서 실행되는 WCF 서비스입니다. 일반적으로 콘솔 응용 프로그램 내에서 WCF 서비스를 호스팅하면 응용 프로그램의 개발 단계에서 유용합니다. 이 경우 쉽게 디버깅을 수행할 수 있으며, 응용 프로그램 내에서 발생하는 상황을 확인하기 위한 추적 정보를 손쉽게 얻을 수 있으며, 새 위치에 서비스를 복사하여 이동하기 용이합니다. 이 호스팅 옵션을 사용하면 리치 클라이언트 응용 프로그램(예: WPF 및 WinForms 응용 프로그램)에서 외부와 쉽게 통신할 수 있습니다. 예를 들면 사용자 인터페이스에 대해 WPF를 사용하고 또한 WCF 서비스를 호스팅하여 다른 클라이언트에서 해당 서비스에 연결하여 정보를 공유할 수 있도록 하는 피어 투 피어 공동 작업 클라이언트가 있습니다.

관리되는 Windows 서비스

이 호스팅 옵션은 WCF 서비스를 호스팅하는 응용 프로그램 도메인(AppDomain)을 관리되는 Windows 서비스(이전의 NT 서비스)로 등록하여 프로세스 수명이 Windows 서비스의 SCM(서비스 제어 관리자)에 의해 제어되도록 하는 옵션입니다. 자체 호스팅 옵션과 같이 이러한 유형의 호스팅 환경에서는 일부 호스팅 코드를 응용 프로그램의 일부로 작성해야 합니다. 서비스를 WCF 서비스 계약 인터페이스에서뿐 아니라 ServiceBase 클래스에서 상속시켜 서비스가 Windows 서비스와 WCF 서비스로 구현됩니다. 그러면 ServiceHost가 만들어지고, 재정의된 OnStart 메서드 내에서 열리고 재정의된 OnStop 메서드 내에서 닫힙니다. Installutil.exe 도구를 사용하여 프로그램을 Windows 서비스로 설치하려면 Installer에서 상속되는 설치 관리자 클래스를 구현해야 합니다. 자세한 내용은 방법: 관리되는 Windows 서비스에서 WCF 서비스 호스팅을 참조하십시오. 관리되는 Windows 서비스 호스팅 옵션을 통해 사용할 수 있는 시나리오는 메시지가 활성화되지 않은 보안 환경의 IIS 외부에서 호스팅되는 장기 실행 WCF 서비스입니다. 서비스 수명은 대신 운영 체제에 의해 제어됩니다. 모든 버전의 Windows에서 이 호스팅 옵션을 사용할 수 있습니다.

IIS(인터넷 정보 서비스)

IIS 호스팅 옵션은 ASP.NET과 통합되어 있으며, 이러한 기술이 제공하는 프로세스 재활용, 유휴 상태이면 종료, 프로세스 상태 모니터링 및 메시지 기반 활성화 같은 기능을 사용합니다. Windows XP 및 Windows Server 2003 운영 체제에서 이 옵션은 높은 가용성 및 확장성을 필요로 하는 웹 서비스 응용 프로그램을 호스팅하는 기본 솔루션입니다. IIS는 또한 고객이 엔터프라이즈 수준의 서버 제품에서 기대하는 통합된 관리 효율성을 제공합니다. 이 호스팅 옵션을 사용하려면 IIS를 적절히 구성해야 하지만 호스팅 코드를 응용 프로그램의 일부로 작성하지 않아도 됩니다. WCF 서비스를 위한 IIS 호스팅을 구성하는 방법에 대한 자세한 내용은 방법: IIS에서의 WCF 서비스 호스팅을 참조하십시오.

IIS에서 호스팅되는 서비스는 HTTP 전송만 사용할 수 있습니다. IIS 5.1에서의 서비스 구현 시 Windows XP의 경우 몇 가지 제한이 있습니다. Windows XP의 IIS 5.1에서 호스팅되는 WCF 서비스에 제공되는 메시지 기반 활성화 기능은 동일한 컴퓨터에서 자체 호스팅되는 다른 WCF 서비스가 통신할 때 포트 80을 사용하지 못하도록 차단합니다. WCF 서비스가 Windows Server 2003의 IIS 6.0에서 호스팅되는 경우에는 다른 응용 프로그램과 동일한 AppDomain/응용 프로그램 풀/작업자 프로세스에서 실행될 수 있습니다. 그러나 WCF와 IIS 6.0 모두 커널 모드 HTTP 스택(HTTP.sys)을 사용하므로 IIS 5.1과 달리 IIS 6.0에서는 포트 80을 동일한 시스템에서 실행되는 자체 호스팅되는 다른 WCF 서비스와 공유할 수 있습니다.

WAS(Windows Process Activation Service)

WAS(Windows Process Activation Service)는 Windows Vista에서도 사용할 수 있는 Windows Server 2008을 위한 새 프로세스 활성화 메커니즘입니다. 이 옵션의 경우 익숙한 IIS 6.0 프로세스 모델(응용 프로그램 풀 및 메시지 기반 프로세스 활성화)과 호스팅 기능(오류로부터 신속한 보호, 상태 모니터링 및 재활용 등)은 유지되지만, 활성화 아키텍처에서 HTTP에 대한 종속성을 제거하였습니다. IIS 7.0은 WAS를 사용하여 HTTP를 통한 메시지 기반 활성화를 수행합니다. 추가 WCF 구성 요소는 또한 WAS에 연결되어 TCP, MSMQ 및 명명된 파이프와 같은 WCF에서 지원하는 다른 프로토콜을 통한 메시지 기반 활성화를 제공합니다. 이렇게 하면 통신 프로토콜을 사용하는 응용 프로그램에서 프로세스 재활용, 오류로부터 신속한 보호 및 일반적인 구성 시스템과 같은 HTTP 기반 응용 프로그램에서만 사용할 수 있었던 IIS 기능을 사용할 수 있습니다.

이 호스팅 옵션을 사용하려면 WAS를 적절히 구성해야 하지만 호스팅 코드를 응용 프로그램의 일부로 작성하지 않아도 됩니다. WAS 호스팅을 구성하는 방법에 대한 자세한 내용은 방법: WAS에서 WCF 서비스 호스팅을 참조하십시오.

호스팅 환경 선택

다음 표에서는 각 호스팅 옵션과 관련된 몇 가지 주요 이점 및 시나리오를 요약하여 설명합니다.

image

응용 프로그램이 배포되는 Windows 버전, 메시지를 보내는 데 필요한 전송, 응용 프로그램에서 필요로 하는 프로세스와 응용 프로그램 도메인 재활용 유형에 따라 선택하는 호스팅 환경이 달라집니다. 다음 표에서는 이러한 요구 사항과 관련된 데이터를 요약하여 설명합니다.

image

신뢰할 수 없는 호스트에서 서비스나 확장을 실행하면 보안이 손상된다는 점에 주의해야 합니다. 또한 가장하여 ServiceHost를 열 때 응용 프로그램에서 사용자의 WindowsIdentity를 캐싱하여 사용자가 로그오프되었는지 확인해야 합니다.

+ Recent posts