WebResponse有时会报timeout异常

请叫我汪海 2014-02-14 12:24:23
本来是自己的主机,用的联通的百兆宽带,在服务器写的API供客户端每隔1分钟调用1次,但是经常出现timeout的情况,有时候又访问正常。
后来去阿里云买了服务器,timeout次数明显减少,不过依旧还是会报错,大概每100次有一次timeout,这个对项目来说十分致命。
想问下大家在开发的过程中遇到过这样的问题吗,谢谢。
代码如下:
        /// <summary>
/// 模拟POST访问
/// </summary>
/// <param name="postUrl">模拟POST的URL</param>
/// <param name="postDataStr">需要POST的数据</param>
/// <returns>模拟访问的网页源代码</returns>
public static string sendPost(string postUrl, string postDataStr)
{
System.Net.ServicePointManager.DefaultConnectionLimit = 100;
System.Net.ServicePointManager.Expect100Continue = false;
string retString = string.Empty;
if (Global.noException)
{
//用来存放cookie
CookieContainer cookie = null;
HttpWebRequest request = null;
Stream myRequestStream = null;
HttpWebResponse response = null;
Stream myResponseStream = null;
StreamReader myStreamReader = null;
try
{
//转化
byte[] byteArray = Encoding.UTF8.GetBytes(postDataStr);
cookie = new CookieContainer();
//发送一个POST请求
request = (HttpWebRequest)WebRequest.Create(new Uri(postUrl));
request.CookieContainer = cookie;
request.Timeout = 3000;
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteArray.Length;
myRequestStream = request.GetRequestStream();
myRequestStream.Write(byteArray, 0, byteArray.Length);
myRequestStream.Close();
//获取返回的内容
response = (HttpWebResponse)request.GetResponse();
response.Cookies = cookie.GetCookies(response.ResponseUri);
myResponseStream = response.GetResponseStream();
myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
retString = myStreamReader.ReadToEnd();
}
catch (Exception ex)
{
Global.noException = false;
MessageBox.Show("发送POST失败!\n报错:" + ex.Message);
if (Login.IsConnectedInternet())
{
HtmlTool.SendGet(Global.downUrl);
}
}
finally
{
if (myStreamReader != null)
{
myStreamReader.Close();
}
if (myResponseStream != null)
{
myResponseStream.Close();
}
if (response != null)
{
response.Close();
}
}
}
return retString;
}
...全文
124 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
肖无疾 2014-02-14
  • 打赏
  • 举报
回复
出错自动重试
hard_learner 2014-02-14
  • 打赏
  • 举报
回复
ServicePointManager.ServerCertificateValidationCallback += (se, cert, chain, sslerror) => true; var response = (HttpWebResponse)request.GetResponse(); 添加上上面的代码试下

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧