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

2단계: 콘솔 클라이언트 만들기

업데이트 날짜: 2014년 1월

이 항목에서는 Microsoft Azure 서비스 버스를 사용하는 기본 REST 스타일 큐 및 게시/구독 응용 프로그램을 만드는 데 필요한 아홉 가지 작업 중 두 번째 작업을 설명합니다.

Service Bus 큐를 통해 FIFO(선입 선출) 큐에 메시지를 저장할 수 있습니다. 항목과 구독은 게시/구독 패턴을 구현합니다. 항목을 만든 다음 해당 항목과 연결된 구독을 하나 이상 만듭니다. 항목으로 보낸 메시지는 해당 항목의 가입자에게 즉시 발송됩니다.

이 자습서에 포함된 코드의 특성은 다음과 같습니다.

  • 서비스 네임스페이스, 발급자 이름 및 발급자 키를 사용하여 Microsoft Azure Active Directory 액세스 제어(액세스 제어 서비스 또는 ACS라고도 함)에 연결해 SWT(Simple Web Token)을 가져옴으로써 Service Bus 서비스 네임스페이스 리소스 액세스 권한을 얻습니다.

  • 큐를 만들고, 큐에 메시지를 보내고, 큐의 메시지를 읽습니다.

  • 항목 및 해당 항목에 대한 구독을 만들고 구독에서 메시지를 보내고 읽습니다.

  • 서비스 네임스페이스에 대해 Service Bus에서 모든 큐, 항목 및 구독 정보(구독 규칙 포함)를 검색합니다.

  • 그런 다음 큐, 항목 및 구독 리소스를 삭제합니다.

서비스는 REST 스타일 웹 서비스이므로 전체 교환에서 문자열이 사용되기 때문에 특수 형식은 포함되지 않습니다. 즉, Visual Studio 프로젝트는 기본값 이외의 참조를 사용해서는 안 됩니다. 그러나 구성에서 기본값이 수정된 경우에는 일부 기본 참조를 코드에 추가해야 할 수 있습니다.

1단계에서 서비스 네임스페이스 및 자격 증명을 가져온 후에는 기본 Visual Studio 콘솔 응용 프로그램을 만듭니다.

  1. 시작 메뉴에서 Visual Studio를 마우스 오른쪽 단추로 클릭하고 관리자 권한으로 실행을 클릭하여 프로그램을 관리자 권한으로 엽니다.

  2. 새 콘솔 응용 프로그램 프로젝트를 만듭니다. 파일 메뉴를 클릭하고 새로 만들기, 프로젝트를 선택합니다. 새 프로젝트 대화 상자에서 Visual C#을 선택합니다. Visual C#이 표시되지 않으면 다른 언어 아래를 확인합니다. 그런 다음 콘솔 응용 프로그램 템플릿을 선택하고 이름을 Microsoft.ServiceBus.Samples로 지정합니다. 기본 위치를 사용합니다. 확인을 클릭하여 프로젝트를 만듭니다.

  3. C# 프로젝트의 경우 Visual Studio에서는 Program.cs라는 파일을 만듭니다. 이 클래스는 Main()이라는 빈 메서드를 포함합니다. 콘솔 응용 프로그램 프로젝트를 올바르게 빌드하려면 이 메서드가 필요합니다. 따라서 이 메서드는 프로젝트 내에 그대로 두어도 안전합니다.

  4. using 문이 다음과 같이 표시되는지 확인합니다.

    using System;
    using System.Collections.Specialized;
    using System.IO;
    using System.Net;
    using System.Text;
    using System.Xml;
    
  5. 필요한 경우 프로그램의 서비스 네임스페이스 이름을 Visual Studio 기본값에서 Microsoft.ServiceBus.Samples로 바꿉니다.

  6. Program 클래스 내에 다음 전역 변수를 추가합니다.

    static string serviceNamespace;
    static string baseAddress;
    static string token;
    const string sbHostName = "servicebus.windows.net";
    const string acsHostName = "accesscontrol.windows.net";
    
  7. Main() 메서드 내에 다음 코드를 복사합니다.

    Console.Write("Enter your service namespace: ");
    serviceNamespace = Console.ReadLine();
    
    Console.Write("Enter your issuer name: ");
    string issuerName = Console.ReadLine();
    
    Console.Write("Enter your issuer secret: ");
    string issuerSecret = Console.ReadLine();
    
    baseAddress = "https://" + serviceNamespace + "." + sbHostName + "/";
    try
    {
        // Get a SWT token from the Access Control Service, given the issuerName and issuerSecret values.
        token = GetToken(issuerName, issuerSecret);
    
        string queueName = "Queue" + Guid.NewGuid().ToString();
    
        // Create and put a message in the queue using the SWT token.
        CreateQueue(queueName, token);
        SendMessage(queueName, "msg1");
        string msg = ReceiveAndDeleteMessage(queueName);
    
        string topicName = "Topic" + Guid.NewGuid().ToString();
        string subscriptionName = "Subscription" + Guid.NewGuid().ToString();
        CreateTopic(topicName);
        CreateSubscription(topicName, subscriptionName);
        SendMessage(topicName, "msg2");
    
        // Wait for messages to post:
        //System.Threading.Thread.Sleep(500);
        Console.WriteLine(ReceiveAndDeleteMessage(topicName + "/Subscriptions/" + subscriptionName));
    
        // Get an Atom feed with all the queues in the namespace
        Console.WriteLine(GetResources("$Resources/Queues"));
    
        // Get an Atom feed with all the topics in the namespace
        Console.WriteLine(GetResources("$Resources/Topics"));
    
        // Get an Atom feed with all the subscriptions for the topic we just created
        Console.WriteLine(GetResources(topicName + "/Subscriptions"));
    
        // Get an Atom feed with all the rules for the topic and subscritpion we just created
        Console.WriteLine(GetResources(topicName + "/Subscriptions/" + subscriptionName + "/Rules"));
    
        // Delete the queue we created
        DeleteResource(queueName);
    
        // Delete the topic we created
        DeleteResource(topicName);
    
        // Get an Atom feed with all the topics in the namespace, it shouldn't have the one we created now
        Console.WriteLine(GetResources("$Resources/Topics"));
    
        // Get an Atom feed with all the queues in the namespace, it shouldn't have the one we created now
        Console.WriteLine(GetResources("$Resources/Queues"));
    }
    catch (WebException we)
    {
        using (HttpWebResponse response = we.Response as HttpWebResponse)
        {
            if (response != null)
            {
                Console.WriteLine(new StreamReader(response.GetResponseStream()).ReadToEnd());
            }
            else
            {
                Console.WriteLine(we.ToString());
            }
        }
    }
    
    Console.WriteLine("\nPress ENTER to exit.");
    Console.ReadLine();
    
    

표시:
© 2014 Microsoft