4

这是关于 ASP.NET MVC 背景的。当我需要及时调用action方法时,我会使用HangFire这样的第三部分工具,它运行在应用程序池下。我想创建一个同步作业,它读取我们的 ERP 系统生成的 .csv 文件并更新我们的自定义数据库。
但我知道在我的 ASP.NET MVC 中将此同步作业作为操作方法并不是正确的做事方式,因为后台作业不应该是我的 Web 应用程序的一部分。

所以为了处理我的同步工作,我做了以下事情:

  1. 使用 Visual Studio 2012,我创建了一个新的控制台应用程序,并在其主要方法中编写了如下同步作业:-

    class Program
    {
        static void Main(string[] args)
        {
            using (Entities sd = new Entities())
            {
                //code goes here
                sd.SaveChanges();
            }
        }
    }
    
  2. 如何及时调用此控制台应用程序?我正在考虑使用 Windows 任务调度程序创建一个新任务,该任务将每小时执行一次并调用应用程序,主要调用 .application 文件?
4

2 回答 2

2

现在我的问题是如何及时调用这个控制台应用程序?. 我正在考虑使用 Windows 任务调度程序创建一个新任务,该任务将每小时执行一次并调用应用程序,主要调用 .application 文件?

运行程序是Windows 任务计划程序(TS) 的用途之一。所以的,请务必使用 TS。

使用 TS 的其他好处是:

  • 能够指定用户帐户来运行进程
  • 多种方法来指定任务何时运行的触发器
  • 控制任务是否应该运行的条件机制(计算机空闲;省电)
  • 以及运行时任务的愉快历史

另一种方法是创建您自己的调度服务来运行您的应用程序,但由于以下原因,这种选择不受欢迎

  1. 重新发明轮子
  2. Windows 充斥着大量的专有任务调度服务,它们基本上都在做同样的事情。

Web 应用程序中的后台作业

尽管可以说可以在 ASP.NET 中生成/调度一个后台线程/工作项来调用一些 c# 代码,但这里的危险是 IIS 不知道您已经这样做了。由于网络不活动,它可能会决定暂停或回收您的应用程序池,然后您的计划作业将被发送到无效。所以为什么不推荐。

现在你总是可以告诉 IIS 不要让你的应用程序池超时,这样它就不会被定期回收,但我怀疑这会导致其他问题。

最好不要一开始就这样做。

但是,在 ASP.NET 中使用 Task Scheduler API 来安排操作以运行控制台应用程序并没有错。

于 2016-01-13T01:23:34.877 回答
2

Windows 任务调度程序是调用 .net 控制台应用程序的一种完全有效的方式。我有几个我写的和支持的,已经运行了多年,没有任何问题。

于 2016-01-13T01:26:30.283 回答