在托管Web服务器中安排作业

有人可以给我一个使用.NET技术实现日常工作的最佳方法。 我有一个asp.net应用程序,在我的实例中托管在共享主机GODaddy中的sqlserver数据库。 我的应用程序用于添加/更改数据库中的数据,此时数据执行得相当公平。 我有一个新要求,每天根据存储在数据库中的一些数据标准发送一些电子邮件警报。

最初我想写一个Windows服务,但是godaddy不允许访问除托管应用程序之外的数据库。 有人有任何想法每天凌晨1点发送警报吗?

提前致谢

请参阅Jeff Atwood的ASP.NET中的简易后台任务 。

从链接复制/粘贴:

private static CacheItemRemovedCallback OnCacheRemove = null; protected void Application_Start(object sender, EventArgs e) { AddTask("DoStuff", 60); } private void AddTask(string name, int seconds) { OnCacheRemove = new CacheItemRemovedCallback(CacheItemRemoved); HttpRuntime.Cache.Insert(name, seconds, null, DateTime.Now.AddSeconds(seconds), Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, OnCacheRemove); } public void CacheItemRemoved(string k, object v, CacheItemRemovedReason r) { // do stuff here if it matches our taskname, like WebRequest // re-add our task so it recurs AddTask(k, Convert.ToInt32(v)); } 

我没有将GoDaddy用于域名注册以外的任何其他内容,因此我对您在其托管平台上可以做或不可以做的事情没有任何经验。 我也不知道他们的支持或知识基础是什么样的,但我会说你最好的选择是向GoDaddy询问他们的建议。 否则,您可能会继续实施技术上可行的东西,但被托管公司阻止。

如果它不是黄金时段的应用程序,那么快速和肮脏的事情就是让某种外部机器人在服务器上调用(安全)网页来触发通知过程。 这不是一个真正的解决方案,但如果这个网站只是你的一个爱好,它可能会让你到达,直到你找到主机允许的东西。

如果这个主机不符合您的要求,也可能是寻找新主机的好时机。 这些天有很多好的ASP.NET主机可用。

您可以使用Web服务器中的Windows计划程序来计划可以根据特定条件发送邮件的存储过程调用。

 osql.exe -S servername -d database -U username -P password -Q "EXEC spAlertOnCriteria" 

参考文献:

  • OSQL
  • 任务计划程序

许多托管服务提供商可以每隔X分钟为您请求一个URL。 我不知道GoDaddy是否会这样做,但如果是这样,你可以创建一个启动工作的ASMX页面,并告诉他们自动执行它。

如果他们不这样做,一个解决方案可能是在每个页面请求的后台线程中启动作业。 如果你这样做,请确保你输入的代码限制它每隔X分钟或更长时间运行一次(可能使用静态变量或数据库表) – 阅读这个故事

如果您可以在托管应用程序和数据库的网站上公开服务 – 当然是经过身份validation的服务 – 那么您可以从任何带有凭据的框中远程访问该服务,下拉数据并以这种方式发送邮件。

这可以是作为Windows服务编写的自动过程,在调度程序下运行的应用程序,或者在凌晨1:00推送的某个按钮。 你的选择。

仅仅因为应用程序是唯一可以访问数据库的东西并不意味着您不能以其他方式公开数据。

使用System.Timers,System.Threading创建在预定时间运行的实例。 让该线程执行您想要的任何任务…确保代码是线程安全的!