对于在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,这不是我在该项目中的选择。
我的主要问题仍然是找到一种方法来运行这些长期运行的任务。
一种方法是将工作分解成较小的部分,但在这种情况下,我想在同一请求中处理它。
答案 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>