2013-03-28 2 views
1

키워드를 기반으로 Twitter에서 트윗을 읽는 앱이 있습니다. 이러한 키워드는 주기적으로 바뀔 수 있으며 키워드가 닫히면 스트림을 닫고 다시 열어야합니다. 스트림을 아무 문제없이 열 수 있지만 스트림을 닫으려고 할 때 문제가 있습니다. 다음은 몇 가지 예제 코드입니다.닫기에서 스트림 판독기

 try 
     { 
      response = (HttpWebResponse)request.GetResponse(); 
      using (Stream stream = response.GetResponseStream()) 
      { 
       using (StreamReader reader = new StreamReader(stream)) 
       { 
        WriteLogMessage("Stream open - entering loop"); 
        while (true) 
        { 
         if (count == 10) break; 
         count++; 

         string tweet = reader.ReadLine(); 
         Console.Write(tweet); 
        } 

        WriteLogMessage("Exited loop"); 
       } 
       /**** Program seems to freeze and never gets past this point ****/ 
       WriteLogMessage("Reader disposed"); 
      } 
      WriteLogMessage("Stream disposed"); 
     } 
     catch (Exception ex) 
     { 
      WriteLogMessage(ex.Message); 
     } 
     finally 
     { 
      if (response != null) 
       response.Dispose(); 
      WriteLogMessage("Response closed"); 
     } 

이 코드는 내 win7 (x64) 시스템에서 올바르게 실행됩니다. 그러나 서버 2008 또는 서버 2012 (둘 다 x64)에 배포하면이 고정 동작이 발생합니다. 트위터에 필요한 헤더 이외의 HttpWebRequest에 매개 변수를 설정하지 않습니다. 누구든지 무슨 일이 벌어지고 있는지에 대해 어떤 생각을 가지고 있습니까?

+0

한'using' 문을보십시오 :'사용 (위해 StreamReader 리더 = 새에서는 StreamReader (응답. GetResponseStream()))'. 문제는 동일한 스트림을 두 번 닫음으로써 발생한다고 생각합니다. –

+0

카운트 란 무엇이며 어디에 정의되어 있습니까? 또한,'reader.ReadLine'의 줄을'reader.ReadToEnd(); '로 바꾸지 마십시오. – MethodMan

+0

@DJKRAZE OP는 [Twitter의 스트리밍 API] (https://stream.twitter.com/1.1/statuses)를 사용하는 것 같습니다. /sample.json) .... 결코 끝내지 않는 .... – I4V

답변

2

저는이 문제를 수시로 접했습니다. 완전히 이해하지 못하는 이유 때문에 스트림은 모든 것을 수신 할 때까지 공개 상태를 유지하려고합니다. 이 문제는 스트림을 닫기 전에 request.Abort으로 전화하는 것과 같은 문제가되었습니다. 당신의 코드에서, 예를 들어, 내가 작성합니다

WriteLogMessage("Exited loop"); 
    request.Abort(); 
} 

내가 약간의 시간이 다시 그것에 대해 블로그 : http://www.informit.com/blogs/blog.aspx?uk=The-hanging-web-request

+0

이것이 작동하는 것 같습니다, 감사합니다! – mdm20