system.timers.timer不会在服务器上触发已发生的事件

时间:2013-04-19 16:15:10

标签: visual-studio-2010 web-services timer

我有一个Web服务,我在其中使用了计时器。当我在我的vs2010中运行服务应用程序时,它的工作就像一个魅力。但是当我将它部署到远程服务器时,它不会触发ElapsedEventHandler。我使用Logger记录事件,并将写入权限设置为日志文件。 让我解释一下。我正在尝试编写一个等待工作的服务,而且工作就是将电子邮件发送到一个大清单。和电子邮件应该以20秒的间隔发送。 这是我的代码的一部分:

 public class EmailSender : IEmailSender
{

    Queue<AdvEmail> ListOfEmails = new Queue<AdvEmail>();
    List<EmailJob> EmailJobs = new List<EmailJob>();

    Timer timerFetchJobs = null;
    Timer timerSendEmails = null;

    public EmailSender()
    {
        try
        {
            Logger.Log("init service");
            timerFetchJobs = new Timer();
            timerFetchJobs.Interval = 5 * 1000;
            timerFetchJobs.Elapsed += new ElapsedEventHandler(timerFetchJobs_Elapsed);
            timerFetchJobs.Enabled = true;
            timerSendEmails = new Timer();
            timerSendEmails.Interval = 20 * 1000;
            timerSendEmails.Elapsed += new ElapsedEventHandler(timerSendEmails_Elapsed);
            timerSendEmails.Enabled = true;
            timerFetchJobs.Start();
            timerSendEmails.Start();
            Logger.Log("init service Ended Succefully");
            Logger.Log("timerFetchJobs.Enabled=" + timerFetchJobs.Enabled.ToString());
            Logger.Log("timerSendEmails.Enabled=" + timerSendEmails.Enabled.ToString());
        }
        catch (Exception ex)
        {
            Logger.Log("Error in InitService. Message: " + ex.Message);
        }
    }

    void timerSendEmails_Elapsed(object sender, ElapsedEventArgs e)
    {
        timerSendEmails.Stop();
        Logger.Log("Checking for Emails in the Queue");
        // some statments here

        timerSendEmails.Start();
    }

    void timerFetchJobs_Elapsed(object sender, ElapsedEventArgs e)
    {
        timerFetchJobs.Stop();
        try
        {
            FetchJobsFromDB();
        }
        catch (Exception ex)
        {
            Logger.Log("Error in timerFetchJobs. Message: " + ex.Message);
        }
        timerFetchJobs.Start();
    }

当我从浏览器转到服务addreess时,它初始化并正确记录init级别,但没有解雇计时器的线索!我不知道为什么? 我做错了什么? 谢谢

编辑: 这是我在本地运行时的日志文件:

日志条目:1392/01/30 08:47:09 :: init service ------------------------------ -

日志条目:1392/01/30 08:47:09 :: init服务结束成功---------------------------- ---

日志条目:1392/01/30 08:47:09 :: timerFetchJobs.Enabled = True --------------------------- ----

日志条目:1392/01/30 08:47:09 :: timerSendEmails.Enabled = True --------------------------- ----

日志条目:1392/01/30 08:47:14 ::检查数据库中的工作-------------------------- -----

日志条目:1392/01/30 08:47:16 ::有一份新工作。工作名称是Pad 71 -------------------------------

日志条目:1392/01/30 08:47:19 ::为工作添加电子邮件第71页------------------------- ------

以下是我将其部署到远程服务器时的日志文件

日志条目:1392/01/30 08:47:09 :: init service ------------------------------ -

日志条目:1392/01/30 08:47:09 :: init服务结束成功---------------------------- ---

日志条目:1392/01/30 08:47:09 :: timerFetchJobs.Enabled = True --------------------------- ----

日志条目:1392/01/30 08:47:09 :: timerSendEmails.Enabled = True --------------------------- ----

1 个答案:

答案 0 :(得分:0)

我更改了Logger类并解决了问题。我不知道为什么它在服务器上不起作用。