3단계: Service Bus를 사용하도록 WCF 계약 구현
이 항목에서는 기본 WCF(Windows Communication Foundation) 서비스 및 Windows Azure Service Bus를 사용하는 서비스를 호출할 수 있는 클라이언트를 만드는 데 필요한 일곱 가지 작업 중 세 번째 작업을 설명합니다. 일곱 가지 작업 모두에 대한 개요를 살펴보려면 Service Bus 릴레이된 메시징 자습서 항목을 참조하십시오. 이전 작업은 2단계: Service Bus에서 사용할 WCF 서비스 계약 정의였으며 다음 작업은 4단계: Service Bus를 통해 등록할 기본 웹 서비스 호스팅 및 실행입니다. Service Bus 서비스를 만들려면 인터페이스를 통해 정의되는 계약을 먼저 만들어야 합니다. 에 대한 자세한 내용은 인터페이스를 만들려면 2단계: Service Bus에서 사용할 WCF 서비스 계약 정의를 참조하십시오. 이 항목에 나와 있는 다음 단계에서는 인터페이스를 구현합니다. 이 작업에는 사용자 정의 IEchoContract 인터페이스를 구현하는 EchoService라는 클래스 만들기 과정이 포함됩니다. 인터페이스를 구현한 후에는 App.config 구성 파일을 사용하여 인터페이스를 구성합니다. 구성 파일에는 서비스 이름, 계약 이름, Service Bus와 통신하는 데 사용되는 프로토콜 유형 등 응용 프로그램에 필요한 정보가 포함됩니다. 이러한 작업에 사용되는 코드는 절차 다음에 이어지는 예제에서 제공됩니다. 서비스 계약을 구현하는 방법에 대한 일반 설명은 WCF(Windows Communication Foundation) 설명서의 서비스 계약 구현을 참조하십시오.
예상 소요 시간: 10분
Service Bus 계약을 구현하려면
-
IEchoContract인터페이스 정의 바로 아래에EchoService라는 새 클래스를 만듭니다.EchoService클래스가IEchoContract인터페이스를 구현합니다.class EchoService : IEchoContract { }다른 인터페이스 구현과 마찬가지로 다른 파일에서 정의를 구현할 수 있습니다. 그러나 이 자습서에서는 구현을 인터페이스 정의 및
Main메서드와 같은 파일에 배치합니다. -
서비스 이름 및 네임스페이스를 나타내는 ServiceBehaviorAttribute 특성을 적용합니다.
[ServiceBehavior(Name = "EchoService", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/")] class EchoService : IEchoContract { }
-
EchoService클래스의IEchoContract인터페이스에 정의된Echo메서드를 구현합니다.public string Echo(string text) { Console.WriteLine("Echoing: {0}", text); return text; }
-
빌드를 클릭합니다. 그런 다음 솔루션 빌드를 클릭하여 작업이 정확한지 확인합니다.
서비스 호스트의 구성을 정의하려면
-
참고 Visual Studio 2010을 사용하는 경우에는 App.config 파일이 프로젝트에 이미 있으므로 1-2단계는 수행할 필요가 없습니다. 솔루션 탐색기에서 EchoService 프로젝트를 마우스 오른쪽 단추로 클릭한 다음 추가를 선택합니다. 그런 후에 새 항목을 클릭합니다.
-
새 항목 추가 대화 상자의 Visual Studio에 설치되어 있는 템플릿 창에서 응용 프로그램 구성 파일을 선택하고 추가를 클릭합니다.
이 구성 파일은 WCF 구성 파일과 매우 비슷하며 서비스 이름, 끝점(Service Bus가 클라이언트와 호스트의 통신을 위해 표시하는 위치) 및 바인딩(통신에 사용되는 프로토콜 유형)을 포함합니다. 두 구성 파일의 주요 차이점은 이 구성된 서비스 끝점의 경우 .NET Framework 3.5의 일부분이 아닌
netTcpRelayBinding을 참조한다는 것입니다. NetTcpRelayBinding은 Service Bus에 새롭게 도입된 바인딩 중 하나입니다. -
솔루션 탐색기에서 현재 다음 XML 요소를 포함하고 있는 App.config를 클릭합니다.
<?xml version="1.0" encoding="utf-8" ?> <configuration> </configuration>
-
<system.serviceModel>XML 요소를 App.config 파일에 추가합니다. 이 WCF 요소는 하나 이상의 서비스를 정의합니다. 이 예제에서는 이 요소를 사용하여 서비스 이름과 끝점을 정의합니다.<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> </system.serviceModel> </configuration> -
<system.serviceModel>태그 내에<services>요소를 추가합니다. 단일 구성 파일에서 여러 Service Bus 응용 프로그램을 정의할 수 있습니다. 그러나 이 자습서에서는 응용 프로그램을 하나만 정의합니다.<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <services> </services> </system.serviceModel> </configuration> -
<services>요소 내에<service>요소를 추가하여 서비스 이름을 정의합니다.<service name="Microsoft.ServiceBus.Samples.EchoService"> </service>
-
<service>요소 내에서 끝점 계약의 위치와 끝점의 바인딩 유형을 정의합니다.<endpoint contract="Microsoft.ServiceBus.Samples.IEchoContract" binding="netTcpRelayBinding" />
끝점은 클라이언트가 호스트 응용 프로그램을 찾을 위치를 정의합니다. 이 자습서의 뒷부분에서는 이 단계를 수행하여 Service Bus를 통해 호스트를 완전히 표시하는 URI를 만듭니다. 바인딩은 Service Bus와의 통신을 위한 프로토콜로 TCP를 사용함을 선언합니다.
-
<services>요소 바로 뒤에 다음 바인딩 확장을 추가합니다.<extensions> <bindingExtensions> <add name="netTcpRelayBinding" type="Microsoft.ServiceBus.Configuration.NetTcpRelayBindingCollectionElement, Microsoft.ServiceBus, Version=1.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> </bindingExtensions> </extensions>
-
빌드, 솔루션 빌드를 차례대로 클릭하여 작업이 정확한지 확인합니다.
예제
다음 코드 예제에서는 서비스 계약 구현을 보여 줍니다.
[ServiceBehavior(Name = "EchoService", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/")] class EchoService : IEchoContract { public string Echo(string text) { Console.WriteLine("Echoing: {0}", text); return text; } }
다음 예제에서는 서비스 호스트와 연결된 App.config 파일의 기본 형식을 보여 줍니다.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service name="Microsoft.ServiceBus.Samples.EchoService">
<endpoint contract="Microsoft.ServiceBus.Samples.IEchoContract" binding="netTcpRelayBinding" />
</service>
</services>
<extensions>
<bindingExtensions>
<add name="netTcpRelayBinding" type="Microsoft.ServiceBus.Configuration.NetTcpRelayBindingCollectionElement, Microsoft.ServiceBus, Version=1.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</bindingExtensions>
</extensions>
</system.serviceModel>
</configuration>
지금까지 Service Bus 계약을 구현하고 끝점을 구성했습니다. 계속해서 4단계: Service Bus를 통해 등록할 기본 웹 서비스 호스팅 및 실행을 진행합니다.