2012-10-29 2 views
2

내가 .NET 3.5에서 실행하려고 할 때 다음 코드는 응답 (I 4 .NET으로 프로젝트를 설정할 때 작동) (I 2 분처럼 기다렸다 - 그것은 동결 것)HttpWebRequest.GetResponse은() .NET 3.5에 달려 있지만 .NET에서 작동 4

 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 

이것은 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; 
    } 

나는이 문서에서 3.5 및 4 사이의 변화를 찾을 수 없습니다. 누구든지 그런 문제에 부딪 혔습니까?

+0

'l_sHost'의 형식이 잘못되었습니다 - "* https :/* website.com"은 "* https : //*website.com"이어야합니다. 그것이 코드에 포함되어 있는지, 아니면 질문에 오타가 있는지 확실하지 않습니다. –

+0

수정 됨. 감사! – Nitay

답변

4

내가이 호출 된이 같은 문제를 명중했다 HttpWebRequest와 내 코드를 사용하는 RESTful 서비스는 .Net 4+에서 훌륭하게 작동하고 .NET 3.5, 3.0의 GetResponse() 행에 매달려있다. 2.0. 이 기사에서 샘플 코드를 시도하고 결국 :

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

및 닷넷의 모든 버전에서 작업을 얻었다. 나는 올바른 것을 설정하거나 자원을 닫지 않았다고 추측하고 있지만, 타격을 가한 다른 누구에게도이 기사를 시도해보십시오.

+0

아직 시도하지는 않았지만 잘 보입니다. 어쨌든 고마워요 – Nitay

+0

아마도 당신이 다른 것을 한 것은 요청 스트림을 닫는 것입니다. 나는 지금 막 동일한 문제가 있고 그것을보기 위하여 그보기에 당신의 연결을 사용했다. .net 4는 Write()를 호출 할 때 스트림을 자동으로 닫아야합니다. – Ronnie

0

링크를 다음에 주어진 코드를 사용하여 시도, 그것을 만든 HttpWebRequest를위한 휴식 데이터를 얻을 수 스트림 클래스를 사용 :

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

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

+0

답변 해 주셔서 감사합니다. 링크가 HttpWebResponse.GetResponseStream에 대해 이야기하지만 GetResponseStream을 사용하여 응답을 얻는 중 내 응용 프로그램이 멈 춥니 다 - GetResponseStream을 사용하는 데 필요한 것은 무엇입니까 – Nitay