Триггер событий Azure-Function, [Ошибка] Привязка параметров к сложным объектам - PullRequest
0 голосов
/ 10 октября 2019

Мне удалось получить одно значение из .JSON, которое передается из The Things Network (LORAWAN) в AzureFunction (триггер HTTP), эта функция Azure передает строковое значение в концентратор событий.

Теперь я хочу передать его из EventHub в CosmoDB.

Я не могу передать его из EventHub. Я пытался найти его в Google, нашел несколько существующих проблем.

Сбой триггера по умолчанию: https://github.com/Azure/azure-functions-templates/issues/893

Связывание .dll: https://github.com/Azure/azure-functions-host/issues/3637

Проблема количества элементов, я надеюсь, что это решит ошибку: https://github.com/Azure/azure-webjobs-sdk/issues/1830

Слегка измененный код по умолчанию:

#r "Microsoft.Azure.EventHubs"
#r "..\bin\Microsoft.Azure.EventHubs.dll"
#r "Newtonsoft.Json"
using System;
using System.Text;
using Microsoft.Azure.EventHubs;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;

public static async Task Run(EventData[] events, ILogger log)
{
    var exceptions = new List<Exception>();

    foreach (EventData eventData in events)
    {
        try
        {
            string messageBody = Encoding.UTF8.GetString(eventData.Body.Array, eventData.Body.Offset, eventData.Body.Count);

            // Replace these two lines with your processing logic.
            log.LogInformation($"C# Event Hub trigger function processed a message: {messageBody}");
            await Task.Yield();
        }
        catch (Exception e)
        {
            // We need to keep processing the rest of the batch - capture this exception and continue.
            // Also, consider capturing details of the message that failed processing so it can be processed again later.
            exceptions.Add(e);
        }
    }

    // Once processing of the batch is complete, if any messages in the batch failed processing throw an exception so that there is a record of the failure.

    if (exceptions.Count > 1)
        throw new AggregateException(exceptions);

    if (exceptions.Count == 1)
        throw exceptions.Single();
}

Файл конфигурации

{
  "bindings": [
    {
      "type": "eventHubTrigger",
      "name": "events",
      "direction": "in",
      "eventHubName": "outeventhub",
      "cardinality": "many",
      "connection": "MyConnectionKey",
      "consumerGroup": "$Default",
      "dataType": "string"
    }
  ],
  "disabled": false
}

Текущая ошибка:

2019-10-10T13:22:42.981 [Error] Function compilation error

Microsoft.CodeAnalysis.Scripting.CompilationErrorException : Script compilation failed.

   at async Microsoft.Azure.WebJobs.Script.Description.DotNetFunctionInvoker.CreateFunctionTarget(CancellationToken cancellationToken) at C:\azure-webjobs-sdk-script\src\WebJobs.Script\Description\DotNet\DotNetFunctionInvoker.cs : 314

   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()

   at async Microsoft.Azure.WebJobs.Script.Description.FunctionLoader`1.GetFunctionTargetAsync[T](Int32 attemptCount) at C:\azure-webjobs-sdk-script\src\WebJobs.Script\Description\FunctionLoader.cs : 55

   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()

   at async Microsoft.Azure.WebJobs.Script.Description.DotNetFunctionInvoker.GetFunctionTargetAsync(Boolean isInvocation) at C:\azure-webjobs-sdk-script\src\WebJobs.Script\Description\DotNet\DotNetFunctionInvoker.cs : 183
2019-10-10T13:22:43.296 [Error] run.csx(1,1): error CS0006: Metadata file 'Microsoft.Azure.EventHubs' could not be found
2019-10-10T13:22:43.337 [Error] Executed 'Functions.EventHubTrigger2' (Failed, Id=2418e8cf-6857-40de-bf0d-bdeffa999dd7)

Ошибка без "dataType": "string"

2019-10-10T13:27:40.085 [Error] Executed 'Functions.EventHubTrigger2' (Failed, Id=be72d6ca-5685-4ec1-85a8-2f27f8a93d36)

Binding parameters to complex objects (such as 'Object') uses Json.NET serialization. 
1. Bind the parameter type as 'string' instead of 'Object' to get the raw values and avoid JSON deserialization, or
2. Change the queue payload to be valid json. The JSON parser failed: Unexpected character encountered while parsing value: T. Path '', line 0, position 0.

На данный момент я просто хочу получить данные из концентратора событий. Я чувствую себя потерянным, в основном из-за того, что это моя первая работа в Azure и смелые примеры документирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...