private string Post(string xml, string url)
{
System.GC.Collect();//垃圾回收,回收没有正常关闭的http连接
string result = "";//返回结果
HttpWebRequest request = null;
HttpWebResponse response = null;
HttpWebRequest.DefaultWebProxy = null;
ServicePointManager.DefaultConnectionLimit = 20; //设置最大连接数
try
{
/***************************************************************
* 下面设置HttpWebRequest的相关属性
* ************************************************************/
request = (HttpWebRequest)WebRequest.Create(url);
request.Proxy = null;
request.Method = "POST";
request.KeepAlive = false;
request.ServicePoint.Expect100Continue = false;
request.AllowWriteStreamBuffering = false;
request.AllowAutoRedirect = true;
request.AutomaticDecompression = DecompressionMethods.GZip;
//设置POST的数据类型和长度
request.ContentType = "text/xml";
request.SendChunked = true; //分段发送
byte[] data = System.Text.Encoding.UTF8.GetBytes(xml);
//request.ContentLength = data.Length;
//往服务器写入数据
var start = DateTime.Now;
using (Stream reqStream = request.GetRequestStream())
{
reqStream.Write(data, 0, data.Length);
}
var end = DateTime.Now;
int timeCost = (int)((end - start).TotalMilliseconds);
LogHelper.Info("Post", "GetRequestStream时间花费2015-12-27:" + timeCost.ToString());
//获取服务端返回
response = (HttpWebResponse)request.GetResponse();
//获取服务端返回数据
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
result = sr.ReadToEnd().Trim();
sr.Close();
}
catch (System.Threading.ThreadAbortException e)
{
LogHelper.Debug("HttpService", "Thread - caught ThreadAbortException - resetting.Exception message: " + e.Message + "");
System.Threading.Thread.ResetAbort();
}
catch (WebException e)
{
LogHelper.Debug("HttpService", e.Message);
if (e.Status == WebExceptionStatus.ProtocolError)
{
LogHelper.Debug("HttpService", "StatusCode:" + ((HttpWebResponse)e.Response).StatusCode);
LogHelper.Debug("HttpService", "StatusDescription:" + ((HttpWebResponse)e.Response).StatusDescription);
}
}
catch (Exception e)
{
LogHelper.Debug("HttpService", "StatusCode:" + e.ToString());
}
finally
{
//关闭连接和流
if (response != null)
{
response.Close();
LogHelper.Info("info", "response.Close();");
}
if (request != null)
{
request.Abort();
LogHelper.Info("info", "request.Abort();");
}
}
return result;
}
LogHelper.Info("Post", "GetRequestStream时间花费2015-12-27:" + timeCost.ToString());
这个地方检测了GetRequestStream 的时间 第一次很慢 然后在访问就快乐 过一段时间又慢了
将
request.KeepAlive = false;
改为
request.KeepAlive = true;
试试
刚找出原因了 这段代码 在本地(win7系统) 是正常的 到服务器(winserver2012)上就 就 变得很慢了 知道什么原因吗
@Claff: 你看下服务器的配置和网络有没有问题。
@SeayXu: 关键就在这里 不知道服务器哪里的配置问题 服务器的IIS也是正常的
@Claff: 测试下网络是否稳定
@Claff: 你的微信支付jsapi哪儿,好了吗,原来你不是说post微信服务器慢吗,怎么解决的。
@Claff: 请教下:最后找出啥原因了吗?我也遇到同样的问题了...
1.在每一行打上执行时间监视,找出慢的代码,如果是在发送请求的时慢,那就像楼上说的检查网络。在服务器上ping微信接口服务器
2.推荐使用webapiclient,用了都说好
3.开头的GC回收完完全全是画蛇添足
我能问下做微信支付,生成订单的时候,post的值接收不到是什么回事么