C# 升级到netcoreapp3.1和功能v3时,功能应用程序出现错误

C# 升级到netcoreapp3.1和功能v3时,功能应用程序出现错误,c#,azure,azure-functions,.net-core-3.1,azure-function-app,C#,Azure,Azure Functions,.net Core 3.1,Azure Function App,我正在调查一个专门应用服务计划中部署在Azure上的功能应用上发生的奇怪行为。当升级到netcore3.1和Functions V3时,当达到DTU限制时,应用程序在与SQL DB的连接上开始出错 功能应用程序由3个项目组成: ProductService.dll(包含函数)-netstandard2.0 ProductService.Indexer.dll(库)-netstandard2.0 ProductService.Shared.dll(库)-netstandard2.0 函数应用程

我正在调查一个专门应用服务计划中部署在Azure上的功能应用上发生的奇怪行为。当升级到netcore3.1和Functions V3时,当达到DTU限制时,应用程序在与SQL DB的连接上开始出错

功能应用程序由3个项目组成:

  • ProductService.dll(包含函数)-netstandard2.0
  • ProductService.Indexer.dll(库)-netstandard2.0
  • ProductService.Shared.dll(库)-netstandard2.0
函数应用程序包含各种函数(60个http、16个队列和4个计时器),总共包含80个函数。Http触发器的利用率非常低(例如,每天<1k个请求,一天内分散)。另一方面,队列触发器不断触发

SQL DB是在SQL弹性池上运行的Azure SQL Server DB,最大利用率限制为200 DTU

目前在netstandard2.0和功能v2上运行,没有任何问题

请参考下面的host.json

{
  "functionTimeout": "12:00:00",
  "version": "2.0",
  "extensions": {
    "queues": {
      "visibilityTimeout": "00:05:00",
      "batchSize": 16,
      "newBatchThreshold":  8
    }
  }
}
唯一的代码更改(在升级到netcoreapp3.1期间)是使用HttpClientFactory而不是HttpClient的自定义包装器。 部署netcoreapp3.1版本的ProductService并将azure Function app更改为v3时,应用程序开始出错,因为达到了SQL DB DTU限制。 我一直在努力理解,我一直在问为什么升级后应用程序会给DB带来更大的压力?与v2相比,v3函数主机现在能够执行更多的调用吗

然后,我尝试通过将host.json中的batchSize降低到8,将newBatchThreshold降低到4来降低host.json配置中的队列触发器并行性,问题似乎消失了(或者至少偶尔发生一次)。但这样做,我将无法满足我的贯穿要求,消息开始堆积在队列中

我已确保使用的是所有最新版本的nuget软件包。为了尽可能多地提供信息,以下是应用程序所依赖的nuget软件包版本:

  • Microsoft.Azure.WebJobs 3.0.19
  • Microsoft.NET.Sdk.Functions 3.0.9
  • Microsoft.Extensions.Caching.Memory 3.1.8
  • Microsoft.Extensions.Configuration.Binder 3.1.8
  • Microsoft.Extensions.DependencyInjection 3.1.8
  • Microsoft.Extensions.DependencyInjection.Abstractions 3.1.8
  • Microsoft.Extensions.Http.Polly 3.1.8
  • 波利7.2.1
  • Polly.Extensions.http3.0.0
  • Microsoft.Azure.WebJobs.Extensions.Storage 3.0.11
  • System.Data.SqlClient 4.8.2
  • Microsoft.Rest.ClientRuntime 2.3.21
  • Microsoft.Rest.ClientRuntime.Azure 3.3.19
进一步调查这件事我有点不知所措。你知道是什么导致了这一切吗


非常感谢

您最好使用Azure支持打开票据,和/或在GitHub@alessandro di lello上提交问题:您能检查一下它是否与Microsoft.Data.SqlClient:一起工作吗@MarkusMeyer你是说代替System.Data.SqlClient?不管怎么说,那个包裹实际上并没有被使用。我已经删除了它,错误仍然存在。