我发现一些使用.NET HttpClient的奇怪行为,我无法解释。我正在使用带有PostAsyc的.NET HttpClient向API发布一个小的JSON请求。该帖子需要两倍的时间来完成(~750ms)然后如果我使用邮递员直接调用API端点(~380ms)。我已经禁用了Expect100Continue,我没有使用代理,Keep Alive是真的。请参阅下面的代码提取注意:API端点在云端托管大约350毫秒,因此我上面的响应时间主要是由于邮件传输时间。
....
ServicePointManager.Expect100Continue = false;
....
var response = await this.httpClient.PostAsync(requestUri, postContent);
var contents = await response.Content.ReadAsStringAsync();
....
有趣的是,当我通过Fiddler路由HttpClient请求时,它需要与我通过Postman发布的时间相同(~380ms)
我已经采取了一些Wireshark捕获来显示网络上产生的变化。我已经删除了SSL握手线。
看起来HttpCLient正在通过网络发送两批数据。发送 - > Ack然后Send-Ack因此2x~380ms = ~760ms,然后接收响应。
正如我之前提到的,当我通过fiddler路由HttpClient请求时,请求需要一半的时间。它也看起来是通过线路发送2批数据,这次的不同之处在于它没有等待发送第二批数据。
如果我通过Postman直接发布到API,这就是它的样子。 Postman posting to API endpoint (~380ms) 。只有一批数据通过网络发送。
有没有人知道为什么HttpCLient Post的使用时间是Postman或Fiddler完成的两倍?
当我使用.NET HttpCLient对API进行GET时,它按预期工作,响应时间约为380毫秒。