1

处理在 Azure IoT 中心创建的消息时遇到一些问题。

出现以下错误:抛出异常:Microsoft.ServiceBus.dll 中的“Microsoft.ServiceBus.Messaging.Amqp.AmqpException”(“发生 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));
            }
        }
    }
}
4

6 回答 6

0

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

于 2016-06-05T22:15:42.613 回答
0

一些评论:

  1. 请确保您使用的是最新版本的服务总线 dll。即,3.1.7(截至今天)。
  2. 请不要在代码中混用异步和同步方法调用。

如果您仍然遇到此问题,请告诉我们。

于 2016-04-08T17:27:36.127 回答
0

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

希望这可以帮助!

默特

于 2016-03-28T20:41:45.797 回答
0

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

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

于 2016-03-02T15:16:33.217 回答
0

使用您的代码进行测试时,我没有遇到此问题,因此它可能与其他问题有关。我发现重复线程Azure IoT hub 基本接收示例,AMQP 错误,它建议检查阻塞端口或代理设置,你可以试试。

于 2016-03-02T02:43:43.527 回答
0

代码对我来说看起来不错。我的是一样的,效果很好。

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

于 2016-03-25T15:51:37.580 回答