点燃自己

才发现已成尘

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

记录:

总是在Post之后出现Timout的error。而且每次都是第二次…… 甚是奇怪。所以去追究原有的逻辑也基本上没有任何问题。

public UserConnection( Student student )
{
    this.student = student;

    this.cookies = new CookieContainer();
    this.InitCookies();

    this.courses = new List<Course>();
}


private void InitCookies()
{
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create( baseUri );
    req.Method = "GET";
    req.CookieContainer = this.cookies;

    req.GetResponse();


}

public void ParseAll()
{
    ParseCourseInfo(); //get info for each class
    .
    .
    .
}

private void ParseCourseInfo()
{
    HtmlDocument page = GetPage( "POST", homeUri, "username=" + student.Username + "&password=" + student.Password + "&testcookies=1" );
    .
    .
    .
}

 



Error:
Stack Trace:    at System.Net.HttpWebRequest.GetRequestStream(TransportContext& context)
   at System.Net.HttpWebRequest.GetRequestStream()
   at URCoursesParserV2.UserConnection.GetPage(String method, Uri pageUri, String queryString) in UserConnection.cs:line 167

 

经过调试与尝试,发现原来是HttpRespone没有关闭。这个问题在于HTTP协议中,如果你不关闭这个对象,他就会导致在原有的Respone上接着做你的事情。

所以最好在使用后关闭它:

using (req.GetResponse()) {}

 

经过这样的处理就不会出现TimeOut的问题。

 

记录已提醒自己在所有的对象使用处理之后,应该释放相应的资源。

posted on 2017-03-22 10:37  爱吃糖豆的猪  阅读(518)  评论(1编辑  收藏  举报