C# HttpClient.Pipeline的坑

2 篇文章 0 订阅
1 篇文章 0 订阅

        实现一个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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值