C# HttpClient.Pipeline的坑

        实现一个Windows客户端,内嵌Webview2,在JS中请求服务端接口。所有Http请求使用HttpClient实现。当并发发起多个请求时,经常出现请求的URL与内容对应错误。比如,同时发出A、B、C三个请求,按理A应该收到RA,以此类推,B->RB,C->RC,可是实际情况是,经常出现A->RB,B->RA,C->RC,没什么确定的规律。

        最开始,我怀疑我的C#代码,怀疑JS代码,怀疑服务端代码,就是没有怀疑到HttpClient身上。我相信它至少不会范这种低级错误。在JS修改来修改去,都解决不了。

        幸好同时有Android客户端,它工作很正常,说明JS跟服务端代码发生错误的可能性小一些。所以,在C#中打了很多点,最终发现,HttpClient.SendAsync的响应是错乱的。这里出错,只能绝望地想其他办法了,或者放弃。

        最终看到AllowPipelining这个设置,根据经验,十有八九是它没处理好,才导致错乱。改成false之后,一切正常了。

WebRequestHandler handler = new WebRequestHandler();
handler.AllowAutoRedirect = false;
handler.ReadWriteTimeout = CLIENT_TIMEOUT;
handler.AllowPipelining = true;

HttpClient client = new HttpClient(handler);

你可能感兴趣的:(C#,至简网格,网络,c#,开发语言)