2019年7月22日 星期一

ASP.NET Core 2.2 Web API讀取 Request.Body時出現 BadHttpRequestException: Reading the request body timed out due to data arriving too slowly

參考 BadHttpRequestException: Reading the request body timed out due to data arriving too slowly

原本在 1.* Web API 的版本上執行正常的程式升級為 2.2時出現  BadHttpRequestException: Reading the request body timed out due to data arriving too slowly
出錯錯誤的程式碼為

StreamReader sr = new StreamReader(Request.Body);
string str = await sr.ReadToEndAsync();

專家找出的問題應該是 tread 的問題,我的環境是在 CentOS 7上,使用 docker佈署 Web API的程式,目前文章上有三種作法
第一種在 Startup.cs ConfigureServices 加上下列程式碼
services.Configure<KestrelServerOptions>(options =>{
options.Limits.MinRequestBodyDataRate = new MinDataRate(1, TimeSpan.FromMinutes(5));
options.Limits.MinResponseDataRate = new MinDataRate(1, TimeSpan.FromMinutes(5));
options.Limits.MaxRequestBodySize = 100000000;
});


第二種在 Main.cs加上
ThreadPool.SetMaxThreads(32_767, 2_000);
ThreadPool.SetMinThreads(1_000, 1_000);

第三種改用 3.*的版本(應該有修正)

我是使用第一種後,目前沒再出現問題。後續再觀察看看是否還會出現一樣的錯誤。

沒有留言:

張貼留言