Azure Функции с IoT Hub не могут получить разделы - PullRequest
1 голос
/ 14 января 2020

Я получаю эту ошибку, когда пытаюсь подключиться к IoT Hub с использованием Azure функций:

Не удалось запустить прослушиватель для функции 'IoTHubDataFunction'. Microsoft. Azure .EventHubs.Processor: Обнаружена ошибка при получении списка EventHub PartitionIds. System.Private.CoreLib: попытка подключения не удалась, потому что подключенная сторона не ответила должным образом через некоторое время, или не удалось установить соединение, так как подключенный хост не смог ответить.

Это мое функциональное приложение код. У него просто есть триггер IoT Hub и группа потребителей, и он регистрирует входящее сообщение.

[FunctionName("IoTHubDataFunction")]
public static void Run([IoTHubTrigger("messages/events", Connection = "IoTHubTriggerConnection", ConsumerGroup = "funcgroup")]EventData message, ILogger log)
{
    log.LogInformation($"C# IoT Hub trigger function processed a message: {Encoding.UTF8.GetString(message.Body.Array)}");
}

И это мой local.settings. json file

{
  "IsEncrypted": false,

  "Values": {
    "IoTHubTriggerConnection": "My IoT Hub connection string",
    "AzureWebJobsStorage": "Storage connection string",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet"
  }
}

Я получение строки подключения IoT-концентратора от портала Azure:

enter image description here

Ответы [ 2 ]

0 голосов
/ 17 января 2020

Попробуйте следующий рабочий образец:

using IoTHubTrigger = Microsoft.Azure.WebJobs.EventHubTriggerAttribute;
using System.Linq;
//...

[FunctionName("IoTHubDataFunction")]
public static void Run2([IoTHubTrigger("messages/events", Connection = "IoTHubTriggerConnection", ConsumerGroup = "funcgroup")]EventData message, ILogger log)
{
    log.LogInformation($"\nBody:\n\t{Encoding.UTF8.GetString(message.Body.Array)}" +
                       $"\nSystemProperties:\n\t{string.Join("\n\t", message.SystemProperties.Select(i => $"{i.Key}={i.Value}"))}" +
                       $"\nProperties:\n\t{string.Join("\n\t", message.Properties.Select(i => $"{ i.Key}={ i.Value}"))}");
}
0 голосов
/ 16 января 2020

Я не могу сказать вам, что не так с вашим кодом, но я могу сказать вам, что это работает для меня:

[FunctionName("QueueTrigger")]
        public static void Run(
            [EventHubTrigger("<hubname>", Connection = "hub2", ConsumerGroup = "<optional>")]string myEventHubMessage, 
            ILogger log)
        {
            log.LogInformation($" Queue trigger function processed: {myEventHubMessage}");
        }

Строка подключения, hub2 в моем случае, в localsettings. json (или среда при работе в Azure) такая же, как и та, на которую вы ссылались. По сути, это просто рассматривает концентратор IoT как концентратор событий.

...