2016-03-01 116 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,但我似乎记得可以在客户端属性下设置传输。 如果您尝试它,您可以轻松找到问题出在代理还是程序中。