6

我们有一个网站,我们需要一个调度程序在特定时间接收通知(电子邮件)。例如。一个人在下午 5 点设置提醒以在下午 4:45 参加会议,将在下午 4:45 收到大致相同的电子邮件。

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

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

4

9 回答 9

9

怎么样:使用 ASP.NET 模拟 Windows 服务以运行计划作业

有一次,这种技术被用在 Stack Overflow 上,尽管我认为它不再是了。

老实说,这对我来说似乎是一个令人讨厌的、容易出错的 hack,但是如果您无法在服务器上运行除您的网站之外的任何东西,那么这样的东西可能是您唯一的选择。

于 2009-04-23T11:41:46.743 回答
4

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

如何创建一个网页来启动您的工作,并在请求该页面的其他地方(即在另一台计算机上)运行计时器。(只需点击页面即可触发您的工作)

于 2009-04-23T11:47:29.570 回答
3

我遇到了和你一样的问题,最后我编写了一个使用 Quartz.NET 的服务:http://quartznet.sourceforge.net/连接到与网站相同的数据库。

于 2009-04-23T11:52:27.343 回答
2

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

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

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

于 2009-04-23T11:32:28.110 回答
1

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

不过,这确实不是一种理想的方法,因为据我所知,定时器不能保证总是调用,因为就像 Peter 所说的那样,不能保证您的 Web 应用程序始终处于活动状态。

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

于 2009-04-23T11:36:15.603 回答
1

但是,如果您真的完全陷入困境并且别无选择,只能将其托管在您的 WebApp 中,

您可以查看在System.Timers.TimerGlobal.asax.cs 文件中创建一个实例。像往常一样连接一个 Elapsed 事件,并给它一些代码来做一些事情

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

但正如有人指出的那样,它不能保证,因为 IIS 可能会在此期间重置,在这种情况下你会错过它。

于 2009-04-23T11:36:49.737 回答
0

这确实是不可取的,但你可以按照 Razzie 的建议去做。我已经看过很多次了。虽然丑陋,但有时你只需要做丑陋的黑客。

但是,使用这种方法,您必须确保您的应用程序没有被卸载。所以你需要某种方式来维持生命。我建议设置一个 Web 监控工具,该工具将不断拉动页面 (aspx) 以保持应用程序处于活动状态。这些家伙是免费的http://mon.itor.us/

于 2009-04-23T11:42:31.267 回答
0

我不相信你,因为 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 的网页没有提供任何关于源代码编译的信息) 欢迎大家提出建议!

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

于 2010-02-20T00:02:05.600 回答
-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 的网页没有提供任何关于源代码编译的信息) 欢迎大家提出建议!

于 2009-07-16T13:23:24.637 回答