I have a windows service that runs four timers for a monitoring application. The timer in question opens a web request, polls a rest web service, and saves the results in a database.

Please see the elapsed method below:

```
        void iSMSPollTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        iSMSPollTimer.Stop();
        try
        {
            Logger.Log("iSMSPollTimer elapsed - polling iSMS modem for new messages");
            string url = "http://...:../recvmsg?user=" + iSMSUser + "&passwd=" + iSMSPassword;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream resStream = response.GetResponseStream();

            XmlSerializer serializer = new XmlSerializer(typeof(Response));
            using (XmlReader reader = XmlReader.Create(resStream))
            {
                Response responseXml = (Response)serializer.Deserialize(reader);
                if (responseXml.MessageNotification != null)
                {
                    foreach (var messageWrapper in responseXml.MessageNotification)
                    {
                        DataContext dc = new DataContext();
                        DateTime monitorTimestamp = DateTime.Now;

                        if (messageWrapper.Message.ToUpper().EndsWith("..."))
                        {
                            //Saved to DB
                        }
                        else if (messageWrapper.Message.ToUpper().EndsWith("..."))
                        {
                            //Saved to DB
                        }
                        dc.SubmitChanges();
                    }
                }
                else
                {
                    Logger.Log("No messages waiting in the iSMS Modem");
                }
            }
            Logger.Log("iSMSPollTimer processing completed");
        }
        catch (Exception ex)
        {
            Logger.Log(GetExceptionLogMessage("iSMSPollTimer_Elapsed", ex));
            Logger.Debug(GetExceptionLogMessage("iSMSPollTimer_Elapsed", ex));
        }
        finally
        {
            iSMSPollTimer.Start();
        }
    }

```

When I look at the log messages, I do get "iSMSPollTimer processing completed" and randomly afterwards the timer does not restart.

Any thoughts?