我具有EventHubTrigger的蔚蓝功能:
[FunctionName("TradesDataProcessStarterEh")]
public static async Task TradesDataProcessStarterEh([EventHubTrigger("aeehrobotronapiintegrationdev", Connection = "EventHubConnectionString", ConsumerGroup = "$Default")]
EventData eventData, PartitionContext partitionContext, [OrchestrationClient] DurableOrchestrationClient starter, ILogger log)
{
if (partitionContext.PartitionId != "1")
return;
var orchestrationId = await starter.StartNewAsync("O_ProcessTradesFromEventHub", eventData);
await partitionContext.CheckpointAsync();
}
orchestrator函数正在接收eventData:
[FunctionName("O_ProcessTradesFromEventHub")]
public static async Task ProcessTradesFromEventHub([OrchestrationTrigger] DurableOrchestrationContext context,
ILogger log)
{
if (!context.IsReplaying)
Console.WriteLine("O_ProcessTradesFromEventHub is triggered");
var eventData = context.GetInput<EventData>();
//do stuff...
}
但是通过执行context.GetInput()我得到了一个例外:
函数'O_ProcessTradesFromEventHub(Orchestrator)'失败,并显示错误。原因:Newtonsoft.Json.JsonSerializationException:无法找到用于类型Microsoft.Azure.EventHubs.EventData的构造函数。一个类应该具有一个默认构造函数,一个带有参数的构造函数或一个标有JsonConstructor属性的构造函数。路径“身体”,第1行,位置81。
答案 0 :(得分:0)
我可以想到3种可以尝试的解决方案:
<your class>
,然后将<your class>
传递给业务流程。 我认为(3)是最干净的解决方案,您可以完全控制自己通过的内容,不幸的是,它可能是性能最低且最乏味的。
祝你好运!
答案 1 :(得分:0)
使用LINQ转JSON-一年后,但希望它可以节省其他人的时间。
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
public static async Task Run(
[OrchestrationTrigger] DurableOrchestrationContext context, ILogger log) {
var eventData = context.GetInput<JObject>();
log.LogInformation ($"Executing tasks with eventData = {eventData}");
string step = (string)eventData.SelectToken("Step");
log.LogInformation ($"Step = {step}");
}