2010-02-02 5 views
1

Я пытаюсь написать приложение, которое получает котировки акций из Google Finance и графически их отображает на C#. Моя программа использует класс HttpWebRequest для запроса исходного кода для веб-страницы, содержащей котировку акций, примерно каждые тридцать секунд. После получения источника я затем извлекаю кавычки и рисую их.Проблемы с использованием HttpWebRequest (C#)

Моя проблема заключается в том, что когда программа идет о запросе каждые 30 секунд, примерно в 50% случаев я вызываю «objWebReq.GetResponse()», я получаю исключения тайм-аута! Я проверил подключение к Интернету, и я абсолютно уверен, что я подключен, когда происходят исключения таймаута. Есть ли что-то, что я делаю неправильно, это может заставить Google иногда отклонять мою просьбу? Вот часть моей программы, которая делает запрос на исходный код.

 //Create and configure object for request 
     HttpWebRequest objWebReq = (HttpWebRequest)WebRequest.Create(url); //Valid URL 
     objWebReq.Timeout = MSWAIT; //Set to 10 seconds 
     objWebReq.Method = "GET"; 
     objWebReq.ContentType = "text/html"; 
     objWebReq.KeepAlive = false; 
     objWebReq.Referer = "http://www.google.com/finance"; 
     objWebReq.UserAgent = 
      "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 
      Firefox/3.6"; 


     StreamReader objStream = null; 


     //Create Object for the response. 
     try 
     { 
      HttpWebResponse objWebResp = (HttpWebResponse)objWebReq.GetResponse(); 
      objStream = new StreamReader(objWebResp.GetResponseStream(),  
             System.Text.Encoding.ASCII); 
     } 
     catch 
     { 
     //Do Nothing 
     } 

     return objStream; 
    } 

ответ

1

Вы не используете веб-отклик, который может привести к таймаутам, когда пул соединений ждет подключения. Я бы посоветовал вам прочитать полный ответ в вашем методе и вернуть его в виде строки, чтобы закрыть соединение:

using (HttpWebResponse response = (HttpWebResponse)objWebReq.GetResponse()) 
{ 
    // Are you sure it's *really* ASCII, rather than (say) UTF-8? 
    using (TextReader reader = new StreamReader(response.GetResponseStream(), 
               Encoding.ASCII)) 
    { 
     return reader.ReadToEnd(); 
    } 
} 
+0

+1 для информации о 'использовании' и' encoding'! – RedFilter

+0

Я изменил свой код, чтобы разместить структуру, которую вы описали, и выглядит так, как будто это исправлено. До сих пор я собирал данные за час (120 исходных запросов) без каких-либо исключений времени. Спасибо за вашу помощь! – Toast

Смежные вопросы