2017-05-16 8 views
0

.NETアプリケーションから電子メールを自動的に送信する必要があります。ただし、将来のジョブのスケジューリングでは、ユーザーがサイトにアクセスしたときにのみジョブが実行されます。ASP .NET - Quartz Schedulerのみユーザーの訪問時にジョブを実行

Global.asax.cs

void Application_Start(object sender, EventArgs e) 
{ 
    // Code that runs on application startup 
    RouteConfig.RegisterRoutes(RouteTable.Routes); 
    BundleConfig.RegisterBundles(BundleTable.Bundles); 
    JobScheduler.Start(); 
} 

ジョブスケジューラ(ScheduledTasks.cs)

public class EmailJob : IJob 
{ 
    public void Execute(IJobExecutionContext context) 
    { 
     BDL.Utilities.sendEmailNotification(to, subject, body); 
    } 
} 

public static void start() 
{ 
    foreach (AspNetUser user in users) 
    { 
     IJobDetail job = JobBuilder.Create<EmailJob>().WithIdentity((jobidentity)) 
      .UsingJobData("to", user.Email) 
      .UsingJobData("subject", subject) 
      .UsingJobData("body", bodyholder).Build(); 

     ITrigger trigger = TriggerBuilder.Create() 
      // schedule for 1 day in the future 
      .StartAt(expdate.AddDays(1))) 
      .WithIdentity(triggerid) 
      .Build(); 

     scheduler.ScheduleJob(job, trigger); 
    } 
} 

私は将来的には1日のトリガーを予定しています。このトリガーによって、私の仕事は将来1日実行されるはずです。しかし、何らかの理由で、このジョブは、ジョブが起動する予定の日にユーザーが自分のサイトを訪れる場合にのみ実行されます。これらのジョブをQuartzによって自動的に実行させるにはどうすればいいですか?

EDIT:私の目標は、アプリケーションプールスレッドを邪魔することなくこれを達成することです。受け入れられた答えは、この質問が単にユーザー対話を自動スクリプトに置き換えることに関することを示しています。複製はアプリケーションプールスレッドを維持する方法を求めていますが、Javaでは追加することがあります。

+1

あなたのApplicationPoolはリサイクルされているようです。 – Rabban

+0

[quartz .netのスケジューラを生かし続ける方法]の複製がありますか?(http://stackoverflow.com/questions/23452920/how-to-keep-quartz-nets-scheduler-alive) – Rabban

+2

アイデアはプールのリサイクルなしでasp.netを実行するWindowsサービスのような別の解決策を見てみる必要があります –

答えて

0

私はより洗練されたソリューションを考え出すことができました。 Zapixツールを使用して、20分ごとにウェブサイトの品質をチェックするようスケジュールを設定することができました。 Zapixは単にサイトを訪問し、http応答を受信しました。 Zapixを使用することで、Webサイトを手動で訪問して電子メールをトリガーする機能を模倣した。

0

+1 to @BRAHIMKamel。 Hangfireを使用して、ASP.NETアプリケーションでジョブ処理を行うことを検討できます。

IISアプリケーションプールを使用している限り、いつでもジョブを終了して再起動できます。つまり、ジョブコードは複数の後続実行を許容する必要があります。電子メールに関しては、実際にメッセージを送信しようとする前に、あなたが望むものをすでに送っているかどうかを確認する必要があります。

+0

あなたはどのようにジョブが実行されているかどうかをチェックすることをお勧めですか? –

+0

@objectivelyC、私はユーザーの最後に送信された電子メールの日付を保存し、送信前にチェックします。重大な考慮事項は、重複したメッセージが許容されるかどうか、または重複したメッセージを2倍にするよりも送信しない方が良いかどうかです。前者が該当する場合は、電子メールの送信後に最後の送信日を更新する必要があります。 – starteleport

関連する問題