原本在 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();
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;
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);
ThreadPool.SetMinThreads(1_000, 1_000);
第三種改用 3.*的版本(應該有修正)
我是使用第一種後,目前沒再出現問題。後續再觀察看看是否還會出現一樣的錯誤。
沒有留言:
張貼留言