Die Funktion funktioniert gut Wenn ich die Bindung string[] verwende, aber wenn ich die Bindung EventData von Azure.Messaging.EventHubs verwende, gibt die Funktion die folgenden Meldungen in der Konsole aus:
Code: Select all
System.Private.CoreLib: Exception while executing function: Functions.MyFunction. Microsoft.Azure.WebJobs.Host: Exception binding parameter 'eventDatas'. Azure.Core.Amqp: Serialization failed due to an unsupported type, System.Byte[].
Executed 'Functions.MyFunction' (Failed, Id=4a2fcfa1-0042-4cb8-92d6-75289685b4dd, Duration=15ms)
System.Private.CoreLib: Exception while executing function: Functions.MyFunction. Microsoft.Azure.WebJobs.Host: Exception binding parameter 'eventDatas'. Azure.Core.Amqp: Serialization failed due to an unsupported type, System.Byte[].
Code: Select all
net7.0
v4
...
Code: Select all
using Azure.Messaging.EventHubs;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;
using my.Models;
using Newtonsoft.Json;
namespace my.function
{
public class MyFunction
{
[EventHubOutput("EventHubOutput", Connection = "EventHubOutputConnectionString")]
[FixedDelayRetry(5, "00:00:10")]
[Function("MyFunction")]
public EventData[] Run([EventHubTrigger("EventHubInput", Connection = "EventHubInputConnectionString", IsBatched = true)] EventData[] eventDatas)
{
List eventDataOutputs = new List { };
// Receive events
foreach (EventData eventData in eventDatas)
{
// Serialize the event
string eventJsonBody = eventData.EventBody.ToString();
MyObject? myObject = JsonConvert.DeserializeObject(eventJsonBody);
// Append nested elements
if (myObject != null)
{
eventDataOutputs.AddRange(myObject.nestedElements.Select(nestedElement => new EventData(JsonConvert.SerializeObject(nestedElement))));
}
}
return eventDataOutputs.ToArray();
}
}
}
Code: Select all
namespace my.Models
{
using Newtonsoft.Json;
public class MyObject
{
[JsonProperty("randomField")]
public string RandomField { get; set; }
[JsonProperty("nestedFields")]
public NestedField[] NestedFields { get; set; }
}
}
Code: Select all
namespace my.Models
{
using Newtonsoft.Json;
public class NestedField
{
[JsonProperty("randomFieldNested")]
public string RandomField { get; set; }
[JsonProperty("time")]
public DateTimeOffset Time { get; set; }
[JsonProperty("longField")]
public long LongField { get; set; }
}
}
Ich habe es mit einem neueren EventHubs versucht und Ereignisse erhalten.