C# 从logic app调用长时间运行的任务api,以避免在.Net Core 3.0中多次重定时后超时错误的请求响应

C# 从logic app调用长时间运行的任务api,以避免在.Net Core 3.0中多次重定时后超时错误的请求响应,c#,asp.net-web-api,azure-logic-apps,asp.net-core-3.0,azure-api-apps,C#,Asp.net Web Api,Azure Logic Apps,Asp.net Core 3.0,Azure Api Apps,我有一个azure api应用程序,公开了一些业务api。 我需要实现长时间运行的任务策略,因为我想从我的逻辑应用程序调用其中一个api,因为该api需要2分钟以上的时间(这是请求的超时限制) 我已经阅读了,还尝试了提供的git示例。 不幸的是,这对我没有多大帮助,因为git上的示例不是非常明确,并且与.NETCore3.0不兼容。 所以,实际上,我使用的是asp net core 3.0。在我的应用程序中使用DI和异步调用。 这里是我想测试的控制器api的一个示例 [HttpG

我有一个azure api应用程序,公开了一些业务api。 我需要实现长时间运行的任务策略,因为我想从我的逻辑应用程序调用其中一个api,因为该api需要2分钟以上的时间(这是请求的超时限制)

我已经阅读了,还尝试了提供的git示例。 不幸的是,这对我没有多大帮助,因为git上的示例不是非常明确,并且与
.NETCore3.0不兼容。

所以,实际上,我使用的是asp net core 3.0。在我的应用程序中使用DI和异步调用。 这里是我想测试的控制器api的一个示例

        [HttpGet]
        [Route("PollDataIntoProduction")]
        public async Task<IActionResult> PrePollData()
        {
            await _pollingService.ProduceData();
            return Ok($"Polling Execution Success at {DateTime.Now}");
        }
[HttpGet]
[路线(“PollDataIntoProduction”)]
公共异步任务preplldata()
{
wait_pollingService.ProduceData();
返回Ok($“在{DateTime.Now}轮询执行成功”);
}
\u pollingService
是注入DI的服务,它为我工作,并且是异步的

下面是我的logic应用程序中的http调用示例(需要2分钟以上的时间,并导致错误的请求和超时)

有谁能提供一个.Net Core 3.0的工作代码示例,说明我如何有效地实现
webhook模式
,以等待我的api在我的逻辑应用程序中完成处理


提前感谢您,

有两种方法可以实现这一点

  • 网钩模式
    为此,您必须使用,它在后台调用触发异步作业的订阅API。此作业必须调用随订阅API调用一起传递的回调Url

    在您的代码中,您不必使用
    wait
    调用
    pollingService
    方法,而是直接通过传入从Logic App传递的
    callbackUrl
    来调用它,然后在准备好后调用该URL

  • 异步模式
    为此,您必须在其设置中启用异步模式。这将调用您的服务,该服务返回一个
    202已接受的
    响应,并在
    位置
    标题中设置一个状态URL,逻辑应用程序将轮询该URL,直到完成

    如果您使用的是Azure函数,则非常适合使用

    在ASP.NET Core中,除了使用带有适当位置标头的
    202 Accepted
    响应外,还必须实现一个检查后台任务进度的状态端点

    此外,如果您的服务扩展到多个实例,则需要使用外部存储(如Redis)来实现,以维护此类作业的状态


  • 我可以知道你想在这个方法“\u pollingService.ProduceData()”中做什么吗?您能分享一下您在问题中提到的git示例吗?这种方法通过EF Core和Hi Haithes与数据库交互后进行一些业务转换,业务转换是否包含多个操作?是否可以使用多线程异步调用来执行操作以节省时间?如果没有,我建议您调用azure中的api应用程序函数和逻辑应用程序中的函数。是的,它已经是异步的,并且执行多个操作。我不能使用azure函数,因为调用azure函数的webhook调用azure函数也会超时。请共享代码示例,因为此解释存在于Microsoft的官方文档中;你最终实现了吗?