2010-05-04 87 views
1

我的计时器quartz.net工作正常,但是一旦部署到远程服务器,它就不会触发。我相信工作安排好,因为如果我回发,它告诉我工作已经存在(但我通常会检查回传)。电子邮件代码绝对有效,因为'button1_click'事件成功发送电子邮件。Quartz.Net调度程序在本地工作,但不在远程主机上

我知道我在移除服务器上拥有完全或中等信任度。我的主人说他们不会施加限制,他们知道哪些会影响它。我需要做的其他事情才能让它运行?

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 
     } 
    } 
} 

回答

5

调度程序工厂对您的应用程序应该是全局的。换句话说,声明它在Global.asax或类似的,有效地给你一个全局的实例来操作。如果运行ASP.NET,应该在应用程序启动时启动调度程序。

要小心。 ASP.NET回收其有效导致关闭调度程序的进程(没有作业将运行),直到下一个请求进入Web服务器再次启动调度程序。推荐的方法是使用Windows服务来运行Quartz.NET作业。

+0

非常感谢。你是对的,范围是问题......! – Glinkot 2010-05-05 02:11:33

+0

@MarkoLahma感谢但据我所知Quartz.NET是为了不使用Win服务。所以,如果我们应该使用Win服务,是否需要使用Quartz.net?应用程序方面是否有另一种解决方案如果是这样,你可以给MVC应用程序的例子吗? – 2015-11-08 12:46:45

+1

@Christof你*可以*在ASP.NET应用程序中托管Quartz,但它有其缺陷,如上所述。你*应该*主办Quartz.NET最好在一个Windows服务,你也可以有管理前端使用ASP.NET MVC等不运行的工作,只是管理日程安排和工作。 – 2015-11-08 15:23:26

相关问题