【发布时间】:2010-10-21 08:17:18
【问题描述】:
我们有一个网站,我们需要一个调度程序在特定时间接收通知(电子邮件)。例如。一个人在下午 5 点设置提醒以在下午 4:45 参加会议,将在下午 4:45 收到大致相同的电子邮件。
由于此站点托管在共享服务器上,我们无法控制服务器来运行任何 SQL 作业或调度程序应用程序。
在这种情况下,asp.net 中有什么可以提供帮助的吗?
【问题讨论】:
标签: asp.net sql-server job-scheduling
我们有一个网站,我们需要一个调度程序在特定时间接收通知(电子邮件)。例如。一个人在下午 5 点设置提醒以在下午 4:45 参加会议,将在下午 4:45 收到大致相同的电子邮件。
由于此站点托管在共享服务器上,我们无法控制服务器来运行任何 SQL 作业或调度程序应用程序。
在这种情况下,asp.net 中有什么可以提供帮助的吗?
【问题讨论】:
标签: asp.net sql-server job-scheduling
我不相信你,因为来源 Quartz.Net 代码(1.0 和 1.0.1) 不能在 Visual 下编译 Studio.Net 2005 和 2008。唯一的方法 获得 Quartz.Net 就是使用整个 Spring.Net 包,它编译 在 VS.Net 2005 和 2008 下很好
除非您可以分享一些提示,否则如何 编译和使用quartz.dll asp.net 项目! (网页的 Quartz.Net 和 readme.txt 没有 提供有关来源的任何信息 coude 编译)每个提示都是 欢迎!
一开始我也遇到了麻烦,但这是因为必要的 AsemblyInfo.cs 包含在父文件夹中。此外,您还需要添加其中包含的三个 DLL。
【讨论】:
我不相信你,因为 Quartz.Net(1.0 和 1.0.1)的源代码不能在 Visual Studio.Net 2005 和 2008 下编译。获得 Quartz.Net 的唯一方法是使用整个 Spring .Net 包,在 VS.Net 2005 和 2008 下编译良好p>
除非你能分享一些技巧,否则如何在 asp.net 项目中编译和使用quartz.dll! (Quartz.Net 和 readme.txt 的网页没有提供任何关于源代码编译的信息)欢迎每个提示!
【讨论】:
我遇到了和你一样的问题,最后我编写了一个使用 Quartz.NET 的服务:http://quartznet.sourceforge.net/ 并连接到与网站相同的数据库。
【讨论】:
您需要在服务器上完成一项工作,但您没有从 ASP.NET 触发它的好方法?
如何创建一个网页来启动您的工作,并在请求该页面的其他地方(即另一台计算机)运行计时器。 (只需点击页面即可触发您的工作)
【讨论】:
这确实是不可取的,但你可以按照 Razzie 的建议去做。我已经看过很多次了。虽然丑陋,但有时你只需要做丑陋的黑客。
不过,使用这种方法,您必须确保您的应用程序没有被卸载。所以你需要某种方式来维持生命。我建议设置一个 Web 监控工具,该工具将不断拉出一个页面 (aspx) 以保持应用程序处于活动状态。这些家伙是免费的http://mon.itor.us/
【讨论】:
这个怎么样:Simulate a Windows Service using ASP.NET to run scheduled jobs。
在某一时刻,这种技术是used on Stack Overflow,尽管我认为它不再是了。
老实说,这对我来说似乎是一个令人讨厌的、容易出错的 hack,但如果您无法在服务器上运行除您的网站之外的任何东西,那么这样的东西可能是您唯一的选择。
【讨论】:
但是,如果您真的完全陷入困境并且别无选择,只能将其托管在您的 WebApp 中,
您可以查看在 Global.asax.cs 文件中创建 System.Timers.Timer 实例。像往常一样连接一个 Elapsed 事件,并给它一些代码来做一些类似的事情
protected void myTimer_Elapsed(object sender, EventArgs e)
{
if(System.DateTime.Now Falls in Some Configured Time-Window)
//Do Stuff
}
但正如有人指出的那样,它不能保证,因为 IIS 可能会在此期间重置, 在这种情况下你会错过它。
【讨论】:
如果您真的无法控制服务器(也就是说,您不能使用 sql 作业、计划任务或安装 Windows 服务器),那么您可以使用在 Global.asax 中初始化的 System.Threading.Timer(例如,在应用程序启动时)每 x 分钟调用一次应用程序中的某个方法。然后,此方法将查询您的数据库并查看需要发送哪些通知。
不过,这确实不是一个理想的方法,因为据我所知,定时器并不能保证总是调用,因为就像 Peter 所说的那样,不能保证您的 Web 应用程序始终处于活动状态。
但是,根据您的要求,如果您没有其他选择,这仍然是一种“足够好”的方法。
【讨论】:
使用 ASP.NET,您无法保证您的应用始终处于活动状态,因此将 Web 应用作为调度解决方案的主机进程在 IMO 中是不可行的。
此方案需要 Windows 服务。您可以完全控制启动和停止进程以及监控应用程序的方式。
你能在不同的机器上托管这样的服务吗?即使 Web 应用程序在托管服务器上运行并不意味着您必须在同一台服务器上运行调度程序。
【讨论】: