2011-05-05 125 views
5

我为我们的客户端构建了一个Windows服务,它从数据库中收集所有已更改/新的行,将它们转换为CSV并在每天晚上将它们上传到某处。现在事实证明他们没有权限安装或运行Windows服务(这是一个仅限Web路径的托管解决方案)。你能运行一个从ASP.Net项目运行计划任务的“服务”吗?

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

我的老板很担心在长时间没人碰到网站的情况下睡觉或卸载的托管过程。我敢肯定,这不会发生,但我绝对不确定。

这样的工作是否正如我想的那样,还是会有一些问题来实现它呢?

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

回答

2

默认情况下,IIS将关闭一个空闲进程。尽管你可以改变它,但你仍然面临网络进程无法保证运行的风险。工作进程设置应该以某种方式保持运行。

1

使用Window的Task Scheduler ....这是一个完美的例子。你可以让它直接调用你的程序集,或者你可以用它来调用你网站上的WCF端点。

+0

客户端只有一个网站托管解决方案,没有虚拟机,没有桌面,什么也没有。如果我们有权访问任务计划程序,那么我们可能有权访问安装Windows服务。 – 2011-05-06 03:16:37

+0

听起来像你需要不同的托管服务提供商?你有多少数据库控制?你能在数据库中安排一项工作吗? – DancesWithBamboo 2011-05-06 04:12:49

+0

我们是专业的商店,我们显然不会采取这种方法,但客户决定与一些托管服务提供商自己托管。没有。 – 2011-05-06 15:57:59

相关问题