2012-10-29 9 views
2

Le code suivant se bloque lorsque je tente de l'exécuter sur .NET 3.5 (cela fonctionne quand je mis le projet à .NET 4)HttpWebRequest.GetResponse() est en attente de .NET 3.5, mais fonctionne sur .NET 4

(je l'ai attendu comme 2 minutes - Il semble geler)

 HttpWebRequest l_oRequest; 
     HttpWebResponse l_oResponse; 

     if (m_bLoggedIn) 
      return true; 

     m_oSession = new SSessionIdentifier(); 
     m_oSession.Cookies = new CookieContainer(); 

     string l_sHost = "https://website.com"; 

     // Start the login sequence 
     l_oRequest = GetNewRequest(l_sHost, "Login.aspx", m_oSession.Cookies); 
     l_oRequest.Timeout = 5000; 
     l_oRequest.ReadWriteTimeout = 5000; 
     l_oRequest.Method = "POST"; 
     l_oRequest.Referer = "https://website.com"; 

     // Set form parameters 
     string l_sFormParameters = "user=" + m_sUsername; 

     // Convert them to the HTTP stream 
     byte[] l_oRequestBuffer = UTF8Encoding.ASCII.GetBytes(l_sFormParameters); 
     var l_oRequestStream = l_oRequest.GetRequestStream(); 
     l_oRequestStream.Write(l_oRequestBuffer, 0, l_oRequestBuffer.Length); 

     // I'm setting this to false because otherwise i can't get the cookies i want. And I love them cookies! 
     l_oRequest.AllowAutoRedirect = false; 

     // Now start the redirection sequence until we get to what we want 
     int l_iDTPos = -1; 
     // This line hangs 
     l_oResponse = (HttpWebResponse)l_oRequest.GetResponse(); 
     while (l_oResponse.StatusCode == HttpStatusCode.Found) 
     { 
       // Yada Yada 

Ceci est la fonction GetNewRequest:

private HttpWebRequest GetNewRequest(string host, string targetUrl, CookieContainer a_oCookieJar) 
    { 
     HttpWebRequest l_oRequest = (HttpWebRequest)HttpWebRequest.Create(host + targetUrl); 
     l_oRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2"; 
     l_oRequest.ContentType = "application/x-www-form-urlencoded"; 
     l_oRequest.AllowAutoRedirect = false; 
     l_oRequest.CookieContainer = a_oCookieJar; 

     return l_oRequest; 
    } 

Je ne pouvais trouver aucun changement entre 3,5 et 4 dans la documentation. Est-ce que quelqu'un a rencontré un tel problème?

+0

Votre 'l_sHost' est mal formé -" * https:/* website.com "devrait être" * https: //*website.com ". Je ne sais pas si c'est dans votre code, ou juste une faute de frappe dans votre question. –

+0

Édité. Merci! – Nitay

Répondre

4

Je frappais ce même problème où j'appelle une Le service RESTful utilisant HttpWebRequest et mon code fonctionnait très bien dans .Net 4+ et accroché sur la ligne GetResponse() dans .Net 3.5, 3.0. 2.0. J'ai fini par essayer l'exemple de code de cet article:

http://msdn.microsoft.com/en-us/library/debx8sh9.aspx

et obtenu fonctionnant dans toutes les versions de .Net. Je devine que je ne mettais pas quelque chose de correct ou fermant une ressource, mais pour n'importe qui d'autre qui frappe ceci donne l'essai d'article.

+0

Je ne l'ai pas encore essayé, mais il semble bon. Merci quand même – Nitay

+0

La chose que vous avez probablement fait est de fermer le flux de requête. Je viens d'avoir le même problème et j'ai utilisé votre lien vers cet exemple pour le voir. .net 4 doit fermer le flux automatiquement lorsque vous appelez Write() – Ronnie

0

essayez d'utiliser le code donné en lien suivant, il a utilisé la classe Stream pour obtenir des données de repos pour le HttpWebRequest fait:

http://msdn.microsoft.com/en-us/library/system.net.httpwebresponse.getresponsestream.aspx

http://forums.asp.net/t/1178426.aspx/1

+0

Merci pour votre réponse. Le lien parle de HttpWebResponse.GetResponseStream, mais mon application se bloque sur l'obtention de la réponse en utilisant GetResponse - Ce qui est nécessaire pour utiliser GetResponseStream – Nitay

Questions connexes