2009-04-23 31 views
6

我们有一个网站,我们需要一个调度程序在特定时间接收通知(电子邮件)。例如。在下午5点设置提醒以在下午4:45出席会议的人将在下午4:45接收电子邮件,内容大约相同。需要asp.net中的工作调度程序

由于本网站托管在共享服务器上,因此我们无法控制服务器运行任何SQL作业或调度程序。

在asp.net中有什么可以帮助在这种情况下?

回答

9

这个怎么样:Simulate a Windows Service using ASP.NET to run scheduled jobs

在某一点上,这项技术是used on Stack Overflow,虽然我不认为它是更多。

说实话,它似乎是一个讨厌的,容易出错的黑客攻击,但如果你无法在服务器上运行任何东西,除了你的网站,那么类似的东西可能是你唯一的选择。

+0

100%同意该方法的分析。然而,只要你了解进入的局限性(IE:即“计划中的”作业可能无法在预定的时间内完全运行),那么它可能是一个很好的解决方案。 – NotMe 2010-04-23 20:11:49

2

使用ASP.NET,您无法保证您的应用程序始终处于活动状态,因此Web应用程序作为调度解决方案的主机进程并不可行。

Windows服务是您在这种情况下需要的。您可以完全控制启动和停止流程以及监控应用程序的方式。

你能够在不同的机器上托管这样的服务吗?即使Web应用程序在托管服务器上运行,并不意味着您必须在同一台服务器上运行调度程序。

+0

此外,Windows服务可以简单地调用托管网站上的Web服务来启动任务,进一步简化事情。 – 2009-04-24 04:16:49

1

如果你确实无法控制服务器(也就是说,你不能使用sql作业,计划任务或安装windows服务器),那么你可以使用你在Global.asax中初始化的System.Threading.Timer(例如,在应用程序启动时),每x分钟在应用程序中调用某个方法。然后该方法将查询您的数据库并查看需要发送的通知。

虽然这并不是一个理想的方法,但因为定时器不能保证始终如此调用,因为就像Peter说的那样,您的web应用程序无法保证在任何时候都处于活动状态。

但是,根据您的要求,如果您没有其他选项,它仍然可以是一个“足够好”的方法。

1

但是,如果你真的是完全卡住,别无选择,只能托管在你的Web应用程序,

你可以看看你的Global.asax.cs文件中创建一个System.Timers.Timer实例。线了经过的事件,你通常会,并给它一些代码,不会沿

protected void myTimer_Elapsed(object sender, EventArgs e) 
{ 
    if(System.DateTime.Now Falls in Some Configured Time-Window) 
     //Do Stuff 
} 

但正如有人指出的那样,它并不保证IIS可能会在此期间复位线的东西, 其中你会错过它的情况。

0

这实在是不可取,但你可以做Razzie建议的。我已经看到它做了很多次。虽然很丑,但有时候你只能做丑陋的黑客。

虽然使用这种方法,但您必须确保您的应用程序未卸载。所以你需要某种活着。我会建议设置一个Web监控工具,它会不断拉一个页面(aspx)来保持应用程序的活跃。这些人是免费的http://mon.itor.us/

+1

我认为最好做@Arjan Einbu建议的。像http://mon.itor.us就像设置必要的外部页面请求的一种非常简单的方式。 – codeape 2009-04-24 19:24:05

+0

然后你有一个依赖于你的应用程序,其他机器必须运行,你必须记住它;)我会忘记或机器会因更新等重新启动。任何方式你这样做......这些都是丑陋的黑客;) – 2009-04-25 00:40:24

4

你需要在服务器上完成一项工作,但是你没有从ASP.NET触发它的好方法?

如何创建一个网页,将开始您的工作,并有一个计时器运行在别处(即在另一台计算机上)请求该页面。 (只是点击页面触发你的工作)

-1

我不相信你,因为Quartz.Net(1.0和1.0.1)的源代码在Visual Studio.Net 2005和2008下不能编译。获取Quartz.Net的唯一方法是使用整个Spring.Net包,它编译VS.Net 2005和2008下的罚款

除非你可以分享一些技巧,如何编译和使用asp.net项目中的quartz.dll! (Quartz.Net和readme.txt的网页没有提供关于源代码编译的任何信息)欢迎每个提示!

0

我不相信的你,因为Quartz.Net的源代码 (1.0和1.0.1) 不会在Visual Studio.Net 2005年和2008年的唯一方法 获得石英编译.NET是使用全 Spring.Net包,编译2005年VS.Net下 罚款和2008

除非你能分享一些技巧,如何 编译和 asp.net项目使用的Quartz.dll! (网页 Quartz.Net和readme.txt不 提供关于源的任何信息 coude汇编)每个提示是 欢迎!

我一开始也遇到过麻烦,但是这是因为必需的AsemblyInfo.cs包含在父文件夹中。此外,您需要添加三个包含的DLL。