如何处理Azure App Service中长期运行的作业?

时间:2019-01-11 16:05:55

标签: azure azure-web-app-service

对于在Azure中托管我还是比较陌生。我有一个.net 4.6 Web应用程序,作为应用程序服务在Azure中运行。

该解决方案包含一些运行时间很长的动作。这些在230秒的超时后停止,这似乎是Azure事物。

我了解到,应将此代码放在Azure函数中,以使其作为后台作业运行。只要我不使用“消费”计划,这里就不会超时。

我还在解决方案中使用Azure存储。

我的问题是,如果我使用Azure Functions v1(NuGet Microsoft.NET.Sdk.Functions v1.0.24),则不得不使用Newtonsoft.Json版本= 9.0.1 同时,NuGet WindowsAzure.Storage需要Newtonsoft.Json版本> = 10.0.2

对我来说很麻烦。

然后,我试用了Azure Functions v2。但是它仅支持.Net Core,这不是我在该项目中的选择。

我的主要问题仍然是找到一种方法来运行这些长期运行的任务。

一种方法是将工作分解成较小的部分,但在这种情况下,我想在同一请求中处理它。

1 个答案:

答案 0 :(得分:0)

检查您的hosts.json中没有配置超时。

"functionTimeout": "00:05:00"

V1和V2 are documented here的完整配置选项。

在消费计划中,最大超时为10分钟。在应用服务计划中,它可以是不确定的(但即使只是1或2个小时,也要设定上限)。

如果您想分拆功能,可能会找到合适的Durable Functions pattern

关于您的Newtonsoft冲突,请查看是否可以解决此using a binding redirect

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30AD4FE6B2A6AEED" culture="neutral"/>
            <bindingRedirect oldVersion="0.0.0.0-9.9.0.0" newVersion="10.0.2.0"/>
        </dependentAssembly>
    </assemblyBinding>
</runtime>