2016-03-01 87 views
1

處理在Azure IoT Hub中創建的消息時遇到一些問題。IOT集線器消息處理器

獲取以下錯誤:拋出的異常:Microsoft.ServiceBus.dll中的'Microsoft.ServiceBus.Messaging.Amqp.AmqpException'(「發生AMQP錯誤(condition ='amqp:link:redirect')。」)

任何人都可以指向正確的方向嗎?

問候, 喬納斯

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using Microsoft.ServiceBus.Messaging; 

namespace IOTHubMessageProcessor 
{ 
    class Program 
    { 
     static string connectionString = "HostName=yaddaaaa.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=keydataasdss+tacsCxwkWQeUm9sMCc2GHnQkIZHM="; 
     static string iotHubD2cEndpoint = "messages/events"; 
     static EventHubClient eventHubClient; 
     static void Main(string[] args) 
     { 

      Console.WriteLine("Receive messages\n"); 
      eventHubClient = EventHubClient.CreateFromConnectionString(connectionString, iotHubD2cEndpoint); 

      var d2cPartitions = eventHubClient.GetRuntimeInformation().PartitionIds; 

      foreach (string partition in d2cPartitions) 
      { 
       ReceiveMessagesFromDeviceAsync(partition); 
      } 
      Console.ReadLine(); 
     } 


     private async static Task ReceiveMessagesFromDeviceAsync(string partition) 
     { 
      var eventHubReceiver = eventHubClient.GetDefaultConsumerGroup().CreateReceiver(partition, DateTime.UtcNow); 

      while (true) 
      { 
       EventData eventData = await eventHubReceiver.ReceiveAsync(); 
       if (eventData == null) continue; 

       string data = Encoding.UTF8.GetString(eventData.GetBytes()); 
       Console.WriteLine(string.Format("Message received. Partition: {0} Data: '{1}'", partition, data)); 
      } 
     } 
    } 
} 
+1

您不應該使用Event Hub兼容端點來使用EventHubClient嗎? – juunas

+0

嗨,你還有這個問題嗎? – neolursa

回答

0

代碼看起來好像沒什麼問題。礦是相同的,運作良好。

最好的辦法是在Azure中創建一個新的IoT中心並替換字符串。

0

在構建連接字符串的同時,您可以在第12行嘗試「Endpoint =」而不是「HostName =」嗎?

希望這會有所幫助!

梅特

0

一對夫婦的意見:

  1. 請確保您使用的是最新版本的服務總線的dll。即3.1.7(截至今天)。
  2. 請勿在代碼中混用異步和同步方法調用。

讓我們知道您是否仍然遇到此問題。

0

有時我看到代理過濾amqp數據包。將傳輸類型更改爲http可能會解決問題。 現在我無法訪問Visual Studio,但我似乎記得可以在客戶端屬性下設置傳輸。 如果您嘗試它,您可以輕鬆找到問題出在代理還是程序中。