【问题标题】:Quartz is not working in real serverQuartz 在真实服务器中不工作
【发布时间】:2024-01-17 20:55:01
【问题描述】:

我可以访问我的实时服务器的 db 和 ftp。我想安排一个任务。我在 Quartz.net (ASP.Net C#) 中做了一个计划,它在本地服务器上运行良好,当我将它上传到服务器时,我没有输出。我在任务的顶部和底部添加了一个文件写入命令,这些文件正在写入目标。这是我写的代码

public partial class saaiTest : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        TestClass t = new TestClass();
        t.method("start");

        ISchedulerFactory factory = new StdSchedulerFactory();
        IScheduler scheduler = factory.GetScheduler();

        IJobDetail job = JobBuilder.Create<TestClass>()
            .WithIdentity("name", "group")
            .Build();

        ITrigger triggerCron = TriggerBuilder.Create()
            .WithCronSchedule("0 0/1 * 1/1 * ? *")
            .StartNow()
            .Build();

        scheduler.ScheduleJob(job, triggerCron);
        scheduler.Start();

        Thread.Sleep(TimeSpan.FromMinutes(10));
        scheduler.Shutdown();

        t.method("stop");
    }
}

public class TestClass : IJob
{
    public void Execute(IJobExecutionContext context)
    {
        this.method("job");
    }

    public void method(string filename)
    {
        StreamWriter file2 = new StreamWriter(HostingEnvironment.MapPath("~\\test\\" + filename + ".txt"), true);
        file2.WriteLine("Write Time : " + DateTime.Now);
        file2.Close();
    }
}

我通过运行此页面开始计划,并尝试将其添加到Global.asax。我应该怎么做才能在我的实时服务器中启动调度程序,是否可以从服务器停止调度,如果可以,解决方案是什么?

【问题讨论】:

  • 如果你将 Quartz 添加到你在 IIS 服务器上运行的应用程序中,那么它迟早会停止,Quartz 也会停止。因此,在我看来,此类操作的最佳解决方案是使用 Quartz 作业创建本地服务,并将其作为本地服务在您的实时服务器上运行
  • 您是否检查过asp.net 有权在此文件夹中写入文件?
  • @derloopkat 是的,检查我是否尝试在顶部和底部写入两个文件,它们被写入文件夹
  • @Marcin 我可以访问 db 和 ftp,如何作为本地服务运行?
  • 当你进入服务器的 bin 文件夹时,你能看到那里的quartz dll吗?

标签: c# asp.net quartz-scheduler quartz.net


【解决方案1】:

我希望这个链接能给你你所需要的Simulate a Windows Service using ASP.NET to run scheduled jobs

Quartz 使用 windows 服务,使用 Hangfire 代替不需要 windows 服务。这个Hangfire, a must for adding background tasks in ASP.NET 链接将帮助您入门

【讨论】:

  • 只有当您无权访问服务器并且无法在其上安装服务时,这才是最佳解决方案。在所有其他情况下,应从 Windows 服务启动计划作业。
  • 这取决于你想给你的调度器的用途。如果您需要在特定时间做一些关键的事情,这可能是个问题。问题是 IIS 将回收您的线程并清除您的缓存 (*.com/questions/5314939/…)。 Codeproject 文章中针对该问题(“将您的网站添加到搜索引擎”)中给出的解决方案是狡猾的,并且不能保证线程将在一夜之间运行。当然,您可以禁用回收并使您的网站不稳定。如果没有收到请求,服务器将休眠并且不会做任何事情。
  • 当您可以访问 db 和 ftp 时,这是一个更好的解决方案
最近更新 更多