其他分享
首页 > 其他分享> > 使用Quartz.NET进行MVC3 Webapp任务调度

使用Quartz.NET进行MVC3 Webapp任务调度

作者:互联网

在MVC3 Webapp中安排任务时,我需要您的建议.

我的任务是为Webapp中的不同服务创建一些通用的调度程序,以便以后在开发中使用.例如,我们有一些可用的任务,用户可以根据需要调度.

我不想重新发明轮子,而是找到了可用于创建调度程序的Quartz.Net库.

我知道在webapp内部托管调度不是一个好主意,因为webserver可以回收应用程序池等,因此我决定在Windows Service中使用它,然后使用Quartz.NET远程处理功能来触发webapp内部的任务.

但是我发现了一些问题.如果我错了,请纠正我,但是当我尝试使用Quartz.NET远程处理时,它将在Windows Service进程内运行该作业,这意味着它需要了解我的Web应用程序中的所有类型,因此该Web应用程序的所有程序集应该被它引用,并且我需要为数据库等提供另一个配置文件.因此,万一我写了新的作业类,我就不能轻易安排它,我需要停止服务并为其更新库,所以这不是很通用的方法.

我找不到任何有关Quartz.NET只能基于其界面运行作业的信息.

因此,我想到了编写自己的调度程序的想法,该调度程序将托管在Windows Service中,并将具有一些将在Webapp中实现的IJob接口.我还将使用IPC通道使用.Net远程处理.
因此,Web应用程序将类似于.Net Remoting Server,并且当我想添加一些新作业然后计划它时,我只需要编写实现IJob接口的新作业即可.
我将其注册为

        IpcChannel channel = new IpcChannel("CurrentIPC");

        ChannelServices.RegisterChannel(channel);

        RemotingConfiguration.RegisterWellKnownServiceType(
            typeof(SimpleJob), "SimpleJob", WellKnownObjectMode.SingleCall);
        RemotingConfiguration.RegisterWellKnownServiceType(
            typeof(ComplexObject), "ComplexObject", WellKnownObjectMode.SingleCall);

在这种情况下,我将注册两种作业类型.然后,在计划作业时,我将传递类的名称,并且在代表客户端的Windows服务端(在Webapp端执行对象)中,我将仅将传递的类名与IJob绑定在一起,如下所示:

Dictionary<string, IJob> jobs = new Dictionary<string, IJob>();
    void AddJob(string name)
    {
        IJob obj = (IJob)Activator.GetObject(typeof(IJob), string.Format("ipc://CurrentIPC/{0}", name));
        jobs.Add(name, obj);
    }

因此,现在我无需担心对我的应用程序和其他内容的引用,调度程序将在不知道任何内容的情况下完成它的工作,仅需要IJob接口并在webapp端执行任务即可.

如果我错了或者它太复杂了,还有其他一些更简单的方法可以做到这一点,或者我不知道有一些陷阱,那么你能帮我吗?
谢谢.

附言
还有一个想法是有一个单独的调度程序,该调度程序将通过执行指向Web应用程序中指定服务的链接直接运行Web应用程序方法,例如“ http:// localhost:3030 / Request / 12”,仅此而已.我的Web应用程序应被授权执行该请求,并且再次遇到需要解决的问题,如果有成千上万的计划任务,我们将为此类请求增加Web服务器的负载.

解决方法:

我认为您的方向正确,由于应用程序池回收问题,我将使用Quartz.NET创建调度程序并将其托管在Windows Service中.

它将针对您的Web应用程序或单独的Web服务实例中的每个任务/服务使用特定的URL触发Web应用程序中的任务/服务.

使用这种分隔,调度程序只需要知道URL和调度,而无需直接引用您的应用程序.这在将来的项目中也可以重用.

标签:quartz-net,net-remoting,c,net,asp-net-mvc
来源: https://codeday.me/bug/20191101/1981434.html