본문 바로가기

.Net Technology/WCF

(5) WCF Hosting과 TraceLog기능의 소개

월간 마이크로소프트웨어에 기고한 기사입니다.



 
Hosting

WCF의 호스팅은 Self-호스팅과 Web 호스팅으로 구분할 수 있다. WCF 서비스를 호스팅 하는 방법은 다양하다. 앞선 예제에서 다루었던 호스팅 방식은 Web Hosting이다. WCF 서비스를 웹 사이트로 생성하였고, 그 웹사이트의 주소가 바로 Address가 된 것이다. 다음 표2를 보면 호스팅의 특징들을 보여주고 있다.

Self-Hosting

Web Hosting

윈도우 어플리케이션 기반으로 ServiceHost 클래스를 이용하여 호스팅한다.

Internet Information Server(IIS) 기반으로 가상 디렉토리 안에 서비스 파일(.svc)을 만들어서 호스팅한다.

서비스는 자동으로 관리 되지 않으며, Open()메서드와 Close() 메서드를 이용하여 관리하게 된다.

서비스는 자동으로 관리 된다.

만든 서비스의 기본주소를 정의하여 호스팅한다. Ex)http://localhost:1577/Service/

가상 디렉토리 안에 만든 .svc 파일의 주소로 기본 호스팅한다.

<표2> Self-Hosting & Web Hosting

이 밖에도 롱혼에서 제공되는 Windows Activation Service(WAS) 라는 새로운 프로세스 활성화 메커니즘에 의해서 호스팅을 할 수 있다. 앞의 예제는 웹 호스팅 기반의 서비스였다. Self-Hosting은 콘솔 어플리케이션에서 구현하려면 다음과 같은 코드를 같이 서비스를 시작할 수 있다.

static void Main(string[] args)

{

Uri baseAddress = new Uri("http://localhost:15777/Hoons/Test");

//MathService를 위한 서비스 호스트를 만듭니다.

ServiceHost sh = new ServiceHost(typeof(service1), baseAddress);

sh.AddServiceEndpoint(typeof(IService1), new WSHttpBinding(), "http://localhost:15777/Hoons/Test");

sh.Open();

Console.WriteLine("서비스를 시작합니다...");

Console.WriteLine("서비스를 마치려면 Enter..");

Console.WriteLine();

Console.ReadLine();

sh.Close();

}

<리스트 6> Self-Hosting 서비스

웹에서는 Web.Config 파일을 추가해서 기능을 설정했듯이 콘솔 어플리케이션 역시 App.Config 파일을 추가해서 여러 기능들을 설정할 수 있다. 

Trace Logging

Trace Logging은 WCF에서 제공하는 유용한 기능 중 하나이다. 바로 로그를 남겨서 Trace Viewer라는 툴을 이용해서 로그를 확인할 수 있는 기능이다. 그럼 이 기능을 설정하고 Trace Viewer로 확인하는 예제를 살펴 보도록 하겠다. 먼저 서비스 Configuration을 다음과 같이 설정한다.

<system.serviceModel>

<services>

<service name="MyService" behaviorConfiguration="returnFaults">

<endpoint contract="IMyService" binding="wsHttpBinding"/>

</service>

</services>

<behaviors>

<serviceBehaviors>

<behavior name="returnFaults" >

<serviceMetadata httpGetEnabled="true" />

<serviceDebug includeExceptionDetailInFaults="true" />

</behavior>

</serviceBehaviors>

</behaviors>

<diagnostics>

<messageLogging logEntireMessage="true"

maxMessagesToLog="300"

logMessagesAtServiceLevel="true"

logMalformedMessages="true"

logMessagesAtTransportLevel="true" />

</diagnostics>

</system.serviceModel>

<system.diagnostics>

<sources>

<source name="System.ServiceModel" switchValue="Verbose,ActivityTracing"

propagateActivity="true">

<listeners>

<add type="System.Diagnostics.DefaultTraceListener" name="Default">

<filter type="" />

</add>

<add name="xml">

<filter type="" />

</add>

</listeners>

</source>

<source name="System.ServiceModel.MessageLogging">

<listeners>

<add type="System.Diagnostics.DefaultTraceListener" name="Default">

<filter type="" />

</add>

<add name="xml">

<filter type="" />

</add>

</listeners>

</source>

</sources>

<sharedListeners>

<add initializeData="log.xml" type="System.Diagnostics.XmlWriterTraceListener"

name="xml" traceOutputOptions="Callstack">

<filter type="" />

</add>

</sharedListeners>

<trace autoflush="true" />

</system.diagnostics>

 

<리스트 6> Self-Hosting 서비스


이렇게 로깅을 설정을 하게 되면 현재 Root에 log.xml이라는 로깅파일이 생성된다. Service Trace Viewer 프로그램을 실행해 보자. Windows SDK 의 Tools 메뉴 안에서 실행 할 수 있다.


<화면 8> Service TraceViewer

로깅 파일을 Trace Viewer에서 로드 시켜 보면 화면8과 같이 서비스 로그를 한눈에 확인 할 수 있다.


<화면 9> Service TraceViewer

자, 이렇게 해서 WCF의 Endpoint에 대해서 살펴보았다. WCF의 세부적인 기능을 다루고 싶었지만 적은 지면에 모두 기고 하기에는 무리가 있다. 여기서 설명한 WCF의 기본적인 골격을 잡은 후에 MSDN과 함께 독자 스스로 세부한 기능을 하나씩 학습해 가면 좋을 것이다. WCF를 잘 사용하기 위해서는 분산기술에 대한 기본적인 이해가 있어야 한다. 분산 기술을 접해보지 못한 독자라면 먼저 분산 기술에 대한 깊이 있는 공부를 하고 WCF를 접한다면 많은 도움이 될 것이다. 다음 강좌에서는 WCF 채팅 프로그램을 만들어 볼 것이다. 채팅을 구현하면서 WCF의 조금 세부한 기능들을 소개해 보도록 하겠다.