azure C# API上的HTTP请求正文数据长度大于100MB

a14dhokn  于 2023-05-01  发布在  C#
关注(0)|答案(1)|浏览(228)

我们开发了ASP。NET Core 2.0 Web API,使用C#通过Visual Studio模板创建。
它已经运行了多年,我们从来没有遇到过任何性能问题。直到最近,我们还没有处理大型HTTP请求,因此我们改进了API配置,允许大于2GB的请求。
我们修改了网页。应用程序的配置如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="2147483647" />
      </requestFiltering>
    </security>
  </system.webServer>
  <system.web.extensions>
   <scripting>
     <webServices>
       <jsonSerialization maxJsonLength="2147483647"></jsonSerialization>
     </webServices>
   </scripting>
  </system.web.extensions>
</configuration>

通过这种配置,我们开始能够接收大于30MB的请求。NET Web应用程序默认情况下没有任何问题,但是,当这些请求超过大约100 MB时,应用程序将返回500错误。
API由4层组成:
1.安全
1.控制器
1.服务
1.资料库
问题是,我尝试发送超过100MB的数据,并且我已经能够验证它们到达第2层和第3层(第1层仅管理用户安全性),但是当它们将数据从第3层传递到第4层时,应用程序返回500错误。
奇怪的是,第3层和第4层是DLL,它们不是可以配置请求大小限制的Web项目。
API发布在Azure中,我们认为这是内存问题,但是,通过增加API扩展和增加RAM和CPU,同样的问题不断发生。
有人遇到过这样的事情吗?有什么可能的解决办法吗?
先谢谢你了

bnl4lu3b

bnl4lu3b1#

除了内容长度之外,您还应该检查请求超时的设置,因为它也可能在500 - error status code中结束:
要增加请求超时,请在Program.cs中的.Build()之前添加.UseKestrel(o => { o.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(10); })

public static IWebHost BuildWebHost(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .UseKestrel(o => { o.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(10); })
        .Build();
}

此外,可能会有超时,或与第三方集成的限制,这取决于您存储文件本身的位置和方式。

相关问题