0

Web サービスがあり、その中でタイマーを使用しました。私のvs2010内でサービスアプリケーションを実行すると、魔法のように機能します。しかし、リモートサーバーにデプロイすると、ElapsedEventHandler が起動しません。ロガーを使用してイベントを記録し、ログ ファイルへの書き込み権限を設定しました。もっと説明しましょう。ジョブを待機するサービスを作成しようとしていますが、ジョブは大きなリストに電子メールを送信しています。電子メールは 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();
    }

ブラウザからサービスアドレスにアクセスすると、初期化レベルが正しく初期化されてログに記録されますが、タイマーを起動する手がかりはありません!! 理由がわからない?? 私が間違っていることは何ですか?ありがとう

編集: ローカルで実行したときのログファイルは次のとおりです。

ログ エントリ : 1392/01/30 08:47:09 : :init サービス -------------------------------

ログ エントリ: 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 : :データベース内のジョブを確認しています----------------------------- --

Log Entry : 1392/01/30 08:47:16 : :新しいジョブがあります。ジョブ名はパッド71 -----------------------------------

ログ エントリ : 1392/01/30 08:47:19 : :ジョブ パッド 71 の電子メールの追加------------------------- ---

そして、これがリモートサーバーにデプロイしたときのログファイルです

ログ エントリ : 1392/01/30 08:47:09 : :init サービス -------------------------------

ログ エントリ: 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 ------------------------------ -

4

1 に答える 1

0

Logger クラスを変更して問題を解決しました。なぜサーバー上で動作しなかったのかわかりません。

于 2013-04-22T03:02:27.897 に答える