我们在使用微信支付时,调用统一下单接口时,用httpclinet的PostAsync方法,要经过3秒多时间系统才会发送数据,不知道有没有什么好方法可以缩短这时间。程序用的是asp.net mvc5 操作系统是win2008R2,程序的调用代码如下
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
httpClient = new HttpClient();
httpClient.BaseAddress = new Uri("https://api.mch.weixin.qq.com/");
httpClient.DefaultRequestHeaders
.Accept
.Add(new MediaTypeWithQualityHeaderValue("application/xml"));
httpClient.DefaultRequestHeaders.Connection.Add("keep-alive");
httpClient.Timeout = TimeSpan.FromSeconds(4);
string xmlString = parseXML();//要发送的内容
HttpContent httpContent = new StringContent(xmlString);
HttpResponseMessage response = await httpClient.PostAsync( "https://api.mch.weixin.qq.com/pay/unifiedorder", httpContent).ConfigureAwait(continueOnCapturedContext: false);
调用这段代码正常用时是在400ms-600ms之间,但有时就会报超时,抓包的话也是要3秒之后才有发送数据到微信的服务器。不知道有没有方法解决这个问题。在此先谢过,谢谢
发给同一个host的连接数是有上限的,比如一般浏览器可以支持6个并发连接到同一个host,再多的连接就要等之前的完成才能开始新的。因为你看到发出去的包本身就晚了,所以很可能是由于这个限制,你可以修改一下这个设置试试。
是设置 System.Net.ServicePointManager.DefaultConnectionLimit = 512;吗
@草根总裁: 你可以改一下试试这个能否解决你的问题,如果可以就证明这个猜想是对的。因为这个是全局参数,会影响到所有的ServicePoint,你应该专门为微信服务器建一个ServicePoint。具体的,使用静态方法ServicePointManager.FindServicePoint创建,设置ConnectionLimit属性。
@hsdtt: 谢谢你的回复,我按你说的去设置,结果还是一样的,我再研究研究,谢谢
@草根总裁:
WebRequestHandler handler = new WebRequestHandler();
handler.UseProxy = false;
HttpClient client = new HttpClient(handler);
试试这个,代理只是影响一个程序的第一次http请求。
@hsdtt: 用fiddler跟踪,发现出现超时时,时间都是花在DNS的解析上,目前我的解决方案是在Hosts文件里加上IP和域名,
推荐你使用 苏飞论坛的 HTTPHELPER类
谢谢你,到时试试