IOT集线器消息处理器

时间:2016-03-01 14:38:55

标签: azure iot azure-iot-hub

在处理Azure IoT Hub中创建的邮件时遇到问题。

获取以下错误:抛出异常:' Microsoft.ServiceBus.Messaging.Amqp.AmqpException'在Microsoft.ServiceBus.dll中("发生AMQP错误(条件=' 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));
            }
        }
    }
}

6 个答案:

答案 0 :(得分:0)

在使用您的代码进行测试时,我不会遇到此问题,因此可能与其他内容有关。我找到了重复的帖子Azure IoT hub basic receiving example, AMQP error,它建议检查阻止端口或代理设置,你可以尝试一下。

答案 1 :(得分:0)

您的iotHubD2cEndpoint格式不正确。您可以在azure门户中找到兼容的端点 - >消息 - >设备到云设置。

我发现这是一个非常有用的示例:https://github.com/ppatierno/codesamples/tree/master/IoTHubAmqp/IoTHubAmqp

答案 2 :(得分:0)

代码看起来很好。我的相同,运作良好。

您最好的办法是在Azure中创建一个新的IoT中心并替换字符串。

答案 3 :(得分:0)

在构建连接字符串时,您可以在第12行尝试“Endpoint =”而不是“HostName =”吗?

希望这有帮助!

莫特

答案 4 :(得分:0)

几条评论:

  1. 请确保您使用的是最新版本的Service Bus dll。即3.1.7(截至今日)。
  2. 请不要在代码中混合使用异步和同步方法调用。
  3. 如果您仍然遇到此问题,请告诉我们。

答案 5 :(得分:0)

有时我看到代理过滤amqp数据包。将传输类型更改为http可能会解决问题。 现在我无法访问Visual Studio,但我似乎记得可以在客户端属性下设置传输。 如果您尝试它,您可以轻松地找到问题是在代理中还是在程序中。