gpt4 book ai didi

c# - Azure Durable Functions 无法将 HttpRequestMessage 作为 OrchestrationClient.StartNewAsync 的输入传递

转载 作者:行者123 更新时间:2023-12-03 01:22:29 27 4
gpt4 key购买 nike

我正在尝试使用 Azure Durable Functions 将从 Http Triggered 函数接收到的 HttpRequestMessage 传递到另一个函数中,如下所示:

[FunctionName("RequestHandler")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, methods: new string[] {"get", "post"}, Route = "RequestHandler")]
HttpRequestMessage request,
[DurableClient] IDurableOrchestrationClient orchestrationClient,
ILogger logger)
{

var instanceId = await orchestrationClient.StartNewAsync<HttpRequestMessage>("MakeCallout", request);

return new AcceptedResult("", "");
}
[FunctionName("MakeCallout")]
public static async Task RunOrchestrator(
[OrchestrationTrigger] IDurableOrchestrationContext context,
ILogger logger)
{
HttpRequestMessage request = context.GetInput<HttpRequestMessage>();
}

但是我在运行时在 Newtonsoft 中遇到异常,我推测是因为持久函数使用 Json Seralization 在函数之间传递数据:

System.Private.CoreLib:执行函数时出现异常:RequestHandler。 Newtonsoft.Json:检测到类型为“Microsoft.Extensions.DependencyInjection.ServiceLookup.DynamicServiceProviderEngine”的属性“Engine”的自引用循环。路径“Properties.HttpContext.ServiceScopeFactory.Root”。

有没有办法解决这个问题并传递请求消息,而无需将数据复制到另一个对象然后传递?

最佳答案

您需要读取 HTTP 函数中的请求并将可序列化的对象发送到协调器。定义一个包含编排器中所需数据的类。就像 TheGeneral 在评论中提到的那样,序列化 HttpRequestMessage 很可能是不可能的。

为什么需要这个?因为 Durable Functions 会将输入对象以 JSON 形式存储在表存储中。协调器功能从那里读取它。

关于c# - Azure Durable Functions 无法将 HttpRequestMessage 作为 OrchestrationClient.StartNewAsync 的输入传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68946947/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com