记录:
总是在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的问题。
记录已提醒自己在所有的对象使用处理之后,应该释放相应的资源。