匯出 (0) 列印
全部展開

步驟 2:建立主控台用戶端

更新日期: 2014年1月

此為建立基本 REST 樣式之佇列和使用 Microsoft Azure 服務匯流排 的發行/訂閱應用程式所需之九個工作中的第二個。

服務匯流排 佇列讓您能夠在先進先出佇列中儲存訊息。主題和訂閱會實作發行/訂閱模式;您可以建立主題,然後建立一或多個與該主題相關聯的訂閱。訊息傳送至主題時,會立即傳送給該主題的訂閱者。

此教學課程中的程式碼:

  • 使用您的 服務命名空間、簽發者名稱和簽發者金鑰來連絡 Microsoft Azure Active Directory 存取控制服務 (也稱為「存取控制服務」或 ACS),取得簡易 Web 權杖 (SWT),以便存取 服務匯流排 服務命名空間 資源。

  • 建立佇列、將訊息傳送至佇列,以及從佇列讀取訊息。

  • 建立主題、該主題的訂閱,以及從訂閱傳送並讀取訊息。

  • 從您 服務命名空間 的 服務匯流排 擷取所有佇列、主題及訂閱資訊 (包括訂閱規則)。

  • 其接著會刪除佇列、主題及訂閱資源。

服務是 REST 式 Web 服務,因此,由於整個交換都涉及字串,所以不會涉及任何特定類型。這表示 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