Служба Windows перезапускается при исключении - PullRequest
0 голосов
/ 21 мая 2009

Я создаю службу Windows, которая периодически получает информацию с веб-сайта. Как я могу начать поиск снова, когда исключение поймано? например, когда интернет выходит из строя и позже.

Код:

public string cadena(string pagina)
        {
            try
            {
                String cadena;
                WebRequest myWebRequest = WebRequest.Create(pagina);
                myWebrequest = 10000;
                WebResponse myWebResponse = myWebRequest.GetResponse();
                Stream ReceiveStream = myWebResponse.GetResponseStream();
                Encoding encode = System.Text.Encoding.GetEncoding("ISO-8859-1");
                StreamReader readStream = new StreamReader(ReceiveStream, encode);
                cadena = readStream.ReadToEnd();
                readStream.Close();
                myWebResponse.Close();
                return cadena;
            }
            catch (WebException error)
            {
                myTimer.Enabled = true;
                return "error";
            }
        }
public void inicia(object sender, System.Timers.ElapsedEventArgs e)
        {
                myTimer.Enabled = false;
                String strSite = cadena("www.something.com");
                //Do something with strSite...
                myTimer.Enabled = true;            
        }
    protected override void OnStart(string[] args)
            {           
                    myTimer = new System.Timers.Timer();                    
                    myTimer.Interval = 1500;         
                    myTimer.Elapsed += new System.Timers.ElapsedEventHandler(inicia);      
                    myTimer.Enabled = true;            
            }

1 Ответ

1 голос
/ 21 мая 2009

Вот очень грубый пример, с которого можно начать, это не позволит продолжить выполнение вашей программы, пока вы не получите правильный ответ. Есть лучшие способы сделать это, но это идея, которую вы хотите. Удачи!

myWebResponse = myWebRequest.GetResponse();
while (myWebResponse.ContentLength == -1) {  
  //sleep
 myWebResponse = myWebRequest.GetResponse();
}  

//continue execution

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

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

...