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 連線字串方法
沒有留言:
張貼留言