내보내기(0) 인쇄
모두 확장

4단계: 서비스 버스에 등록할 기본적인 웹 서비스 호스트 및 실행

업데이트 날짜: 2015년 1월

이 항목에서는 기본적인 서비스 버스 서비스 응용 프로그램과 해당 서비스를 호출할 수 있는 클라이언트를 만들기 위해 수행해야 하는 7개 작업 중 네 번째 작업에 대해 설명합니다. 전체 7개 작업의 개요는 서비스 버스 릴레이된 메시징 자습서를 참조하세요. 이 항목에서는 기본적인 서비스 버스 서비스를 실행하는 방법을 설명합니다.

이 작업에서 작성하는 코드의 전체 목록은 절차 뒷부분의 예제에서 제공됩니다.

완료 예상 시간: 10분

  1. Microsoft.ServiceBus.dll에 대한 참조를 프로젝트에 추가합니다. NuGet 서비스 버스 패키지 사용을 참조하세요.

    note참고
    Csc.exe와 같은 명령줄 컴파일러를 사용할 때는 어셈블리 경로도 입력해야 합니다.

  2. Program.cs에서 Microsoft.ServiceBus 네임스페이스에 대한 using 문을 추가합니다.

    using Microsoft.ServiceBus;
    

    Microsoft.ServiceBus는 대부분의 서비스 버스 핵심 기능에 프로그래밍 방식으로 액세스하는 데 사용할 수 있는 API가 포함된 네임스페이스입니다. 모든 서비스 버스 응용 프로그램에 이 네임스페이스를 사용하게 될 것입니다.

  3. Main() 메서드에서 콘솔 창에서 읽어오는 서비스 네임스페이스, 발급자 이름 및 발급자 암호(이름/암호 자격 증명)를 저장할 변수 3개를 만듭니다.

    Console.Write("Your Service Namespace: ");
    string serviceNamespace = Console.ReadLine();
    Console.Write("Your Issuer Name: ");
    string issuerName = Console.ReadLine();
    Console.Write("Your Issuer Secret: ");
    string issuerSecret = Console.ReadLine();
    

    발급자 이름 및 발급자 암호는 나중에 서비스 버스 프로젝트에 액세스하는 데 사용됩니다. 서비스 네임스페이스는 서비스 URI를 만들기 위해 CreateServiceUri에 매개 변수로 전달됩니다.

  4. TransportClientEndpointBehavior 개체를 사용하여 공유 암호를 자격 증명 유형으로 사용할 것임을 선언합니다. 마지막 단계에서 추가한 코드 바로 아래에 다음 코드를 추가합니다.

    TransportClientEndpointBehavior sharedSecretServiceBusCredential = new TransportClientEndpointBehavior();
    sharedSecretServiceBusCredential.TokenProvider = TokenProvider.CreateSharedSecretTokenProvider(issuerName, issuerSecret);
    

  1. 마지막 단계에서 추가한 코드 다음에 서비스의 기준 주소에 대한 Uri 인스턴스를 만듭니다. 이 URI는 서비스 버스 구성표, 서비스 네임스페이스 및 서비스 인터페이스의 경로를 지정합니다.

    Uri address = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, "EchoService");
    

    “sb”는 프로토콜로 TCP를 사용함을 나타내는 서비스 버스 구성표의 약어입니다. 이전에 NetTcpRelayBinding을 바인딩으로 지정할 때도 구성 파일에 이 약어가 표시되었습니다.

    이 자습서에서 URI는 sb://putServiceNamespaceHere.windows.net/EchoService입니다.

  1. 연결 모드를 AutoDetect로 설정합니다.

    ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.AutoDetect;
    

    연결 모드는 서비스가 서비스 버스와 통신하는 데 사용하는 프로토콜(HTTP 또는 TCP)을 설명합니다. 기본 설정인 AutoDetect를 사용하는 경우 서비스는 TCP를 사용할 수 있으면 TCP를 통해 서비스 버스에 연결을 시도합니다. TCP를 사용할 수 없으면 HTTP를 사용합니다. 이 프로토콜은 서비스가 클라이언트 통신용으로 지정하는 프로토콜과는 다릅니다. 해당 프로토콜은 사용하는 바인딩에 의해 결정됩니다. 예를 들어 서비스는 서비스 버스에 표시되는 해당 끝점이 HTTP를 통해 클라이언트와 통신한다고 지정하는 BasicHttpRelayBinding 바인딩을 사용할 수 있습니다. 같은 서비스가 TCP를 통해 서비스 버스와 통신하도록 ConnectivityMode.AutoDetect를 지정할 수도 있습니다.

  2. 이 섹션 앞부분에서 만든 URI를 사용하여 서비스 호스트를 만듭니다.

    ServiceHost host = new ServiceHost(typeof(EchoService), address);
    

    서비스 호스트는 서비스를 인스턴스화하는 WCF 개체입니다. 여기서는 만들려는 서비스 유형(EchoService 유형) 및 서비스를 표시하려는 주소를 전달합니다.

  3. System.ServiceModel.DescriptionMicrosoft.ServiceBus.Description에 대한 참조를 Program.cs 파일 맨 위에 추가합니다.

    using System.ServiceModel.Description;
    using Microsoft.ServiceBus.Description;
    
  4. Main()으로 돌아와서 공용 액세스가 가능하도록 끝점을 구성합니다.

    IEndpointBehavior serviceRegistrySettings = new ServiceRegistrySettings(DiscoveryType.Public);
    

    이 단계에서는 프로젝트의 서비스 버스 ATOM 피드를 검사하여 응용 프로그램을 공개적으로 검색할 수 있음을 서비스 버스에 알립니다. DiscoveryTypeprivate으로 설정해도 클라이언트는 서비스에 액세스할 수 있습니다. 그러나 클라이언트가 서비스 버스 네임스페이스를 검색할 때는 서비스가 표시되지 않습니다. 대신 클라이언트가 끝점 경로를 미리 알고 있어야 합니다. 자세한 내용은 서비스 버스 서비스 검색 및 표시를 참조하세요.

  5. App.config 파일에 정의된 서비스 끝점에 서비스 자격 증명을 적용합니다.

    foreach (ServiceEndpoint endpoint in host.Description.Endpoints)
    {
        endpoint.Behaviors.Add(serviceRegistrySettings);
        endpoint.Behaviors.Add(sharedSecretServiceBusCredential);
    }
    

    이전 단계에서 설명한 것처럼 구성 파일에서 여러 서비스와 끝점을 선언했을 수 있습니다. 이 경우 해당 코드는 구성 파일 내를 이동하면서 자격 증명을 적용해야 하는 모든 끝점을 검색합니다. 그러나 이 자습서에서는 구성 파일에 끝점이 하나뿐입니다.

  1. 서비스를 엽니다.

    host.Open();
    
  2. 서비스가 실행 중임을 사용자에게 알리고 서비스 종료 방법에 대한 설명을 제공합니다.

    Console.WriteLine("Service address: " + address);
    Console.WriteLine("Press [Enter] to exit");
    Console.ReadLine();
    
  3. 작업이 완료되면 서비스 호스트를 닫습니다.

    host.Close();
    
  4. F6 키를 눌러 프로젝트를 빌드합니다.

예제

다음 예제에서는 자습서의 이전 단계에서 만든 서비스 계약과 구현을 보여 주고 콘솔 응용 프로그램에서 서비스를 호스트합니다. 다음 코드를 EchoService.exe 실행 파일로 컴파일하세요.

using System;
using System.ServiceModel;
using System.ServiceModel.Description;
using Microsoft.ServiceBus;
using Microsoft.ServiceBus.Description;

namespace Microsoft.ServiceBus.Samples
{
    [ServiceContract(Name = "IEchoContract", Namespace = "http://samples.microsoft.com/ServiceModel/Relay/")]

    public interface IEchoContract
    {
        [OperationContract]
        String Echo(string text);
    }

    public interface IEchoChannel : IEchoContract, IClientChannel { };

    [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;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {

            ServiceBusEnvironment.SystemConnectivity.Mode = ConnectivityMode.AutoDetect;

            
            
            Console.Write("Your Service Namespace: ");
            string serviceNamespace = Console.ReadLine();
            Console.Write("Your Issuer Name: ");
            string issuerName = Console.ReadLine();
            Console.Write("Your Issuer Secret: ");
            string issuerSecret = Console.ReadLine();

           // Create the credentials object for the endpoint.
            TransportClientEndpointBehavior sharedSecretServiceBusCredential = new TransportClientEndpointBehavior();
            sharedSecretServiceBusCredential.TokenProvider = TokenProvider.CreateSharedSecretTokenProvider(issuerName, issuerSecret);


            // Create the service URI based on the service namespace.
            Uri address = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, "EchoService");

            // Create the service host reading the configuration.
            ServiceHost host = new ServiceHost(typeof(EchoService), address);

            // Create the ServiceRegistrySettings behavior for the endpoint.
            IEndpointBehavior serviceRegistrySettings = new ServiceRegistrySettings(DiscoveryType.Public);

            // Add the Service Bus credentials to all endpoints specified in configuration.
            foreach (ServiceEndpoint endpoint in host.Description.Endpoints)
            {
                endpoint.Behaviors.Add(serviceRegistrySettings);
                endpoint.Behaviors.Add(sharedSecretServiceBusCredential);
            }
            
            // Open the service.
            host.Open();

            Console.WriteLine("Service address: " + address);
            Console.WriteLine("Press [Enter] to exit");
            Console.ReadLine();

            // Close the service.
            host.Close();
        }
    }
}

이제 인터페이스를 만들었으므로 5단계: 서비스 계약용 WCF 클라이언트 만들기를 진행하여 인터페이스를 구현합니다.

Microsoft는 MSDN 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 진행하고 있습니다. 참여하도록 선택하시면 MSDN 웹 사이트에서 나가실 때 온라인 설문 조사가 표시됩니다.

참여하시겠습니까?
표시:
© 2015 Microsoft