【问题标题】:Can you run a "service" that runs a scheduled task from an ASP.Net project?您可以运行从 ASP.Net 项目运行计划任务的“服务”吗?
【发布时间】:2011-08-19 17:36:34
【问题描述】:

我为我们的一个客户端构建了一个 Windows 服务,它从数据库中收集所有更改/新的行,将它们转换为 CSV,然后 FTP 每天晚上将它们上传到某个地方。现在事实证明,他们无权安装或运行 Windows 服务(这是一个仅限 Web 路径的托管解决方案)。

我认为修改 Windows 服务代码以在 ASP.Net 进程中运行并从 Global.asax 实例化很容易(我过去曾这样做过,从 MVC 项目中托管 WCF 服务)。我们在 ASP.Net 4.0 上,使用 Web 表单,这个任务每晚午夜(或其他配置的时间)运行 Quartz 和 OpenPG。

我的老板担心在长时间没有人访问网站的情况下托管进程休眠或卸载。我很确定这不会发生,但我不确定。

这会像我想的那样工作吗,或者以这种方式实现它会有一些问题吗?

谢谢!

编辑:我知道你“可以”(创建一个对象并调用一个不会阻止 Application_Start 执行的方法,该方法会触发计时器或后台线程或其他东西并在后台运行代码)但这是个好主意ASP.Net 托管进程会休眠/杀死它正在运行的线程吗?如果是这样,我可以生成一个新线程(创建我自己的线程,或者从池中消耗一个)并让它无限运行而不会被杀死?

【问题讨论】:

    标签: asp.net windows-services scheduled-tasks global-asax


    【解决方案1】:

    默认情况下,IIS 将关闭一个空闲进程。虽然您可以更改此设置,但您仍然面临无法保证 Web 进程正在运行的风险。工作进程设置应该以某种方式使其保持运行。

    【讨论】:

      【解决方案2】:

      使用 Window 的任务计划程序......这是一个完美的例子。您可以让它直接调用您的程序集,也可以只使用它来调用您网站中的 WCF 端点。

      【讨论】:

      • 客户端只有一个网络托管的解决方案,没有虚拟机,没有桌面,什么都没有。如果我们有权访问任务调度程序,我们可能会有权安装 Windows 服务。
      • 听起来您可能需要不同的托管服务提供商?你有多少数据库控制?你能在数据库中安排一个作业来做吗?
      • 我们是一家专业商店,我们显然不会采用这种方法,但客户决定自己通过一些托管服务提供商获得主机。所以没有。
      猜你喜欢
      • 2013-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多