【问题标题】:Quartz.Net scheduler works locally but not on remote hostQuartz.Net 调度程序在本地工作,但不在远程主机上
【发布时间】:2010-05-04 05:46:59
【问题描述】:

我的开发机器上有一个定时的quartz.net 工作,但一旦部署到远程服务器上,它就不会触发。我相信这项工作安排得很好,因为如果我回发,它告诉我工作已经存在(但是我通常会检查回发)。电子邮件代码确实有效,因为“button1_click”事件成功发送电子邮件。

我了解我对删除服务器具有完全或中等信任。我的主人说他们不应用他们知道会影响它的限制。我还需要做什么才能让它运行?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Quartz;
using Quartz.Impl;
using Quartz.Core;
using Aspose.Network.Mail;
using Aspose.Network;
using Aspose.Network.Mime;
using System.Text;

namespace QuartzTestASP
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                ISchedulerFactory schedFact = new StdSchedulerFactory();
                IScheduler sched = schedFact.GetScheduler();
                JobDetail jobDetail = new JobDetail("testJob2", null, typeof(testJob));
                //Trigger trigger = TriggerUtils.MakeMinutelyTrigger(1, 3);
                Trigger trigger = TriggerUtils.MakeSecondlyTrigger(10, 5);
                trigger.StartTimeUtc = DateTime.UtcNow;
                trigger.Name = "TriggertheTest";
                sched.Start();
                sched.ScheduleJob(jobDetail, trigger);
            }
        }
        protected void Button1_Click1(object sender, EventArgs e)
        {
             myutil.sendEmail();
        }
    }

    class testJob : IStatefulJob
    {
        public testJob() { }

        public void Execute(JobExecutionContext context)
        {
            myutil.sendEmail();
        }

    }

    public static class myutil
    {
        public static void sendEmail()
        {
            // tested code lives here and works fine when called from elsewhere
        }
    }
}

【问题讨论】:

    标签: c# asp.net quartz.net


    【解决方案1】:

    调度程序工厂对于您的应用程序应该是全局的。换句话说,在 Global.asax 或类似文件中声明它,这样可以有效地为您提供一个全局实例来操作。如果运行 ASP.NET,您应该在应用程序启动中启动调度程序。

    当心思想。 ASP.NET 回收其进程,这有效地导致调度程序关闭(不会运行任何作业),直到下一个请求进入 Web 服务器以再次启动调度程序。推荐的方法是使用 Windows 服务来运行 Quartz.NET 作业。

    【讨论】:

    • @MarkoLahma 谢谢,但据我所知,使用 Quartz.NET 是为了不使用 Win 服务。那么,如果我们要使用 Win Service,是否需要使用 Quartz.net?应用程序方面是否有其他解决方案?如果是这样,你能举一个MVC应用的例子吗?
    • @Christof 你可以在 ASP.NET 应用程序中托管 Quartz,但如前所述,它有其缺陷。您应该最好将 Quartz.NET 托管在 Windows 服务中,并且您还可以使用 ASP.NET MVC 等管理前端,它不运行作业,只管理计划和作业。
    • 感谢您的回复。我在 IIS 服务器上发布了应用程序,我认为使用 Windows 服务是我的最佳选择。那么,您能否澄清一下我应该进行哪些更改?我有一个 MVC5 Web 应用程序,但不知道如何每周触发应用程序或 Quartz 作业?我知道 Windows 调度程序设置,我只需要在应用程序、石英和 Windows 端进行的其他设置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多