2016年9月8日 星期四

[研究] Windows Azure - Service Bus - Queue 程式設計 - 連線字串

[研究] Windows Azure - Service Bus - Queue 程式設計 - 連線字串

2016-09-07

寫這篇,是因為微軟官方提供的連線字串有問題,分享點經驗。

相關

[研究] 新版 Azure Portal 管理平台複製 Service Bus Queue 連線字串方法
http://shaurong.blogspot.com/2016/09/azure-portal-service-bus-queue.html

[研究] 舊版 Azure Management 管理平台複製 Service Bus Queue 連線字串方法



參考這篇
https://azure.microsoft.com/zh-tw/documentation/articles/service-bus-dotnet-get-started-with-queues/

PS : Key 和 queueName 值從程式碼貼到本篇文章後,都修改過,不是真實的值。

using System;
using Microsoft.ServiceBus.Messaging;

namespace AzureServiceBusQueueConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            var queueName = "XXXqueue";

   // 舊版 Windows Azure 管理介面 https://manage.windowsazure.com/ 建立 Queue,及得到的連線字串不能用
            //var connectionString1 = "Endpoint=sb://XXXqueue-ns.servicebus.windows.net/;SharedAccessKeyName=rule1;SharedAccessKey=zvXXXXv1Nr8AR6HPaKVlgSNw7gADji7k2fgzitabYOk=;EntityPath=XXXqueue";

            // 依據錯誤訊息,把 EntityPath 改為 Path,依然不能用
            //var connectionString2 = "Endpoint=sb://XXXqueue-ns.servicebus.windows.net/;SharedAccessKeyName=rule1;SharedAccessKey=zvXXXXv1Nr8AR6HPaKVlgSNw7gADji7k2fgzitabYOk=;path=XXXqueue";

            // 把 path=XXXqueue 也不能
            //var connectionString3 = "Endpoint=sb://XXXqueue-ns.servicebus.windows.net/;SharedAccessKeyName=rule1;SharedAccessKey=zvXXXXv1Nr8AR6HPaKVlgSNw7gADji7k2fgzitabYOk=;";

            // 再把分號 ; 拿掉可正常使用
            var connectionString4 = "Endpoint=sb://XXXqueue-ns.servicebus.windows.net/;SharedAccessKeyName=rule1;SharedAccessKey=zvXXXXv1Nr8AR6HPaKVlgSNw7gADji7k2fgzitabYOk=";

   // 新版  https://portal.azure.com/ 得到的連線字串,可正常使用
            var connectionString5 = "Endpoint=sb://XXXqueue-ns.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=3pH8w8LqPxClviRh9gXvZByZ5yXXXXBhn97ENCbQ7uA=";

            //var client1 = QueueClient.CreateFromConnectionString(connectionString1, queueName);
            //var client2 = QueueClient.CreateFromConnectionString(connectionString2, queueName);
            //var client3 = QueueClient.CreateFromConnectionString(connectionString3, queueName);
            var client4 = QueueClient.CreateFromConnectionString(connectionString4, queueName);
            var client5 = QueueClient.CreateFromConnectionString(connectionString5, queueName);

            //var message1 = new BrokeredMessage("1:This is a test message!");
            //var message2 = new BrokeredMessage("2:This is a test message!");
            //var message3 = new BrokeredMessage("3:This is a test message!");
            var message4 = new BrokeredMessage("4:This is a test message!");
            var message5 = new BrokeredMessage("5:This is a test message!");
        }
    }
}



測試1:

(下圖) 舊版 Windows Azure 管理介面 https://manage.windowsazure.com/ 建立 Queue,及得到的連線字串不能用
            //var connectionString1 = "Endpoint=sb://XXXqueue-ns.servicebus.windows.net/;SharedAccessKeyName=rule1;SharedAccessKey=zvXXXXv1Nr8AR6HPaKVlgSNw7gADji7k2fgzitabYOk=;EntityPath=XXXqueue";


(下圖) 錯誤訊息
類型 'System.ArgumentNullException' 的未處理例外狀況發生於 Microsoft.ServiceBus.dll
其他資訊: Queue name should not specified as EntityPath while using this Overload. Instead, please use 'path' parameter

根據訊息,不該用 EntityPath,應該用 path 參數
********************************************************************************
測試2:

(下圖) 依據錯誤訊息,把 EntityPath 改為 Path,依然不能用


(下圖) 錯誤訊息
類型 'System.UnauthorizedAccessException' 的未處理例外狀況發生於 Microsoft.ServiceBus.dll

其他資訊: 40103: Invalid authorization token signature, Resource:sb://**********queue-ns.servicebus.windows.net/**********queue.TrackingId: ***************

********************************************************************************
測試3:
(下圖) 從 path 開始的字串都拿掉,依然出錯

(下圖) 錯誤訊息
類型 'System.UnauthorizedAccessException' 的未處理例外狀況發生於 Microsoft.ServiceBus.dll

其他資訊: 40103: Invalid authorization token signature, Resource:sb://**********queue-ns.servicebus.windows.net/**********queue.TrackingId: ***************


********************************************************************************’

測試4:再把 path 前的分號也拿掉,測試成功了。

********************************************************************************’

測試5:新版管理介面 (  https://portal.azure.com/ ) 得到的連線字串,可正常使用。只是金鑰和舊版 Windows Azure 管理介面得到的不同。

********************************************************************************
注意:
(下圖) 複製時候要注意,連線字串如過直接貼到 Visual Studio 2015 with Update 3 中,後面才加上var connectionString = ",剛複製過來
Endpoint=sb
會自動格式化成
Endpoint = sb
也就是等號前後多了空格,執行會出現下面錯誤訊息。

********************************************************************************

再比一下連線字串後半段的差異

SharedAccessKey=zvXXXXv1Nr8AR6HPaKVlgSNw7gADji7k2fgzitabYOk=;EntityPath=XXXqueue";
SharedAccessKey=zvXXXXv1Nr8AR6HPaKVlgSNw7gADji7k2fgzitabYOk=;path=XXXqueue";
SharedAccessKey=zvXXXXv1Nr8AR6HPaKVlgSNw7gADji7k2fgzitabYOk=;";
SharedAccessKey=zvXXXXv1Nr8AR6HPaKVlgSNw7gADji7k2fgzitabYOk=";
SharedAccessKey=3pH8w8LqPxClviRh9gXvZByZ5yXXXXBhn97ENCbQ7uA=";

********************************************************************************

(完)

開始使用服務匯流排佇列
https://azure.microsoft.com/zh-tw/documentation/articles/service-bus-dotnet-get-started-with-queues/
Get started with Service Bus Queues
https://azure.microsoft.com/en-us/documentation/articles/service-bus-dotnet-get-started-with-queues/

服務匯流排代理傳訊 .NET 教學課程
https://azure.microsoft.com/zh-tw/documentation/articles/service-bus-brokered-tutorial-dotnet/
Service Bus brokered messaging .NET tutorial
https://azure.microsoft.com/en-us/documentation/articles/service-bus-brokered-tutorial-dotnet/

[研究] 新版 Azure Portal 管理平台複製 Service Bus Queue 連線字串方法
http://shaurong.blogspot.com/2016/09/azure-portal-service-bus-queue.html

[研究] 舊版 Azure Management 管理平台複製 Service Bus Queue 連線字串方法



沒有留言:

張貼留言