Aide ... Je n'arrive pas à comprendre pourquoi HttpWebRequest.GetRequestStream() lance un timeout exception ... il se produit TOUJOURS lorsque vous essayez d'établir la seconde (et suite) connexions utilisant POST. Fondamentalement, j'essaye de créer la connexion toutes les 30 secondes. Voici le code relevent:Deuxième appel à HttpWebRequest.GetRequestStream() throws timeout exception
My Main Loop:
for(int i = 0; i < students.Count; i++) {
Log("Processing: " + students[i].DbID + ";" + students[i].Username + ";" + students[i].Password);
UserConnection uc = new UserConnection(students[i]);
uc.ParseAll();
Log("Done Processing: " + students[i].DbID + ";" + students[i].Username + ";" + students[i].Password);
}
De Connexion utilisateur:
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");
.
.
.
}
L'exception suivante est INTERVENUES dans GetPage:
29/07/2012 1:04:22 PM : Exception: System.Net.WebException
Message: The operation has timed out
Source: System
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
Voici le GetPage code où le problème est:
private HtmlDocument GetPage(string method, Uri pageUri, String queryString = "")
{
Stream data = null;
HttpWebResponse res = null;
HttpWebRequest req = null;
try {
req = (HttpWebRequest)WebRequest.Create(pageUri);
req.CookieContainer = this.cookies;
req.Timeout = 1000 * 10; //10 seconds - I've also tried leaving it as default
req.KeepAlive = false; ////I've also tried leaving it as true.
if(method.ToUpper() == "POST") {
req.Method = "POST";
if(queryString != "") {
byte[] postBytes = Encoding.UTF8.GetBytes(queryString);
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = postBytes.Length;
using(data = req.GetRequestStream()) { //////////////EXCEPTION HERE ON SECOND ITERATION
data.Write(postBytes, 0, postBytes.Length);
data.Close();
}
}
} else if(method.ToUpper() == "GET") {
req.Method = "GET";
if(queryString != "") {
pageUri = new Uri(pageUri.ToString() + '?' + queryString);
}
} else {
return null;
}
HtmlDocument page = null;
using(res = (HttpWebResponse)req.GetResponse()) {
using(data = res.GetResponseStream()) {
page = new HtmlDocument();
page.Load(data);
}
}
return page;
} catch(WebException e) {
URCoursesParser.Log(e);
return null;
} catch(Exception e) {
URCoursesParser.Log(e);
return null;
} finally { ///data and res probably don't need to be checked here now because of 'using' blocks
if(data != null) {
data.Close();
data = null;
}
if(res != null) {
res.Close();
res = null;
}
if(req != null) {
req.Abort();
req = null;
}
}
}
Des idées!?! La première itération est toujours bien. Si je termine le programme et redémarre la première itération est encore bien ... C'est toujours la deuxième itération et les suivantes.
Vous êtes l'HOMME! J'aurais dû me sauver 4 heures muckin avec des trucs et je suis venu ici plus tôt. Ici, j'ai juste besoin d'établir une connexion pour initialiser certains cookies afin que je puisse me connecter pendant la demande de publication. – Cailen
@Cailen: N'initialiserait-il pas les cookies si vous les définissez plus tard lorsque vous envoyez une "vraie" requête? Peut-être pas ... –
Merci Jon, quel attrapé. –