Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ASP.NET MVC中创建后台进程_C#_Asp.net_.net_Asp.net Mvc_Backgroundworker - Fatal编程技术网

C# 在ASP.NET MVC中创建后台进程

C# 在ASP.NET MVC中创建后台进程,c#,asp.net,.net,asp.net-mvc,backgroundworker,C#,Asp.net,.net,Asp.net Mvc,Backgroundworker,我有一些数据只有在其过期日期(在创建数据时设置)大于今天,或者其状态为已关闭(用户可以随时更改状态)时才能显示。因此,当数据过期时,其状态应自动设置为Closed 在这种情况下,我想创建一些后台任务,每天检查一次数据(这是个问题,因为主机通常设置应用程序池空闲超时20分钟),并在数据过期时设置状态 我读了一些关于如何实现我想要的东西的文章。但是,我不知道最好的方法是什么 主要解决方案如下: ) ) ) 所以问题是:在ASP.NET中实现后台进程的最佳方法是什么? 另外,我知道更好的解决方案是在

我有一些数据只有在其过期日期(在创建数据时设置)大于今天,或者其状态为
已关闭
(用户可以随时更改状态)时才能显示。因此,当数据过期时,其状态应自动设置为
Closed

在这种情况下,我想创建一些后台任务,每天检查一次数据(这是个问题,因为主机通常设置应用程序池空闲超时20分钟),并在数据过期时设置状态

我读了一些关于如何实现我想要的东西的文章。但是,我不知道最好的方法是什么

主要解决方案如下:

  • )
  • )
  • )
  • 所以问题是:在ASP.NET中实现后台进程的最佳方法是什么?

    另外,我知道更好的解决方案是在Scheduller中运行的Windows服务或控制台应用程序。但是我想在ASP.NET中实现它

    编辑:

    我使用CodeFirst:

    public class Theme
    {
        //...
        [Required]
        public DateTime FinishTime { get; set; } }
        public Status? Status { get; set; }
    }
    

    这听起来更适合调度程序。将执行您想要的操作,并且在此场景中配置起来非常简单:

    public class MyJob : IJob
    {
        public void Execute(IJobExecutionContext context)
        {
            // Find and update data here
        }
    }
    
    // define the job and tie it to our MyJobclass
    IJobDetail job = JobBuilder.Create<MyJob>()
        .WithIdentity("myJob")
        .Build();
    
    // Trigger the job to run at midnight every day
    ITrigger trigger = TriggerBuilder.Create()
        .WithIdentity("myTrigger")
        .StartAt(DateBuilder.AtHourOfDay(0))
        .WithSimpleSchedule(x => x.WithIntervalInHours(24).RepeatForever())
        .Build();
    
    // Tell quartz to schedule the job using our trigger
    scheduler.ScheduleJob(job, trigger);
    
    公共类MyJob:IJob
    {
    public void Execute(IJobExecutionContext上下文)
    {
    //在此处查找并更新数据
    }
    }
    //定义作业并将其绑定到MyJobclass
    IJobDetail job=JobBuilder.Create()
    .WithIdentity(“我的工作”)
    .Build();
    //触发作业在每天午夜运行
    ITrigger trigger=TriggerBuilder.Create()
    .WithIdentity(“myTrigger”)
    .StartAt(DateBuilder.AtHourOfDay(0))
    .WithSimpleSchedule(x=>x.WithIntervalInHours(24).RepeatForever())
    .Build();
    //告诉quartz使用触发器安排作业
    ScheduleJob(作业,触发器);
    

    Quartz的页面上有很多示例。

    将“过期数据”存储在哪里(如何/什么)?您能否修改查询以不显示未过期的数据?据我所知,在IIS中运行后台进程不是一个好方法。我总是使用Windows服务进行计划工作。@Ryan,righht现在我用查询隐藏dat a,但当我向用户显示此数据(可以处理它)时,用户将看到状态“活动”而不是“关闭”。如果记录过期,您可以使用视图模型来显示正确的状态。@Ryan,哦,谢谢,我想我会按照您的建议,它将至少向数据库保存一个更改请求。