我想在ASP.NET 2.0(C#)和SQL2005中开发一个Online Reminder服务。但我没有得到提醒服务的概念。我所知道的是使用在线提醒服务我可以安排未来日期的提醒,通过电子邮件或短信在该日期发送给我(安排提醒)。但是在asp.net中如何做到这一点,caz任何人都可以安排任何日期的提醒,我们将如何知道何时将该邮件发送给该人。我们必须放一些循环或什么。
那么请指导我,在线提醒服务的概念是什么以及如何使用ASP.NET和SQL轻松开发此应用程序
被修改
我在共享托管服务器上,因此该解决方案必须能够在共享托管上工作。
或者
请告诉我是否有人知道任何免费的开源提醒服务CMS,我可以下载并研究它。
答案 0 :(得分:4)
Microsoft SQL Server 2005具有计划(sql作业)和电子邮件功能。您甚至可能不需要使用ASP.NET。
答案 1 :(得分:4)
理想情况下,您会有一个Windows服务,它会定期(每隔几分钟)检查是否需要发送任何新的提醒。由于您使用的是共享主机,因此您可能无法安装服务。
我对Windows共享主机不是很熟悉,但是如果你可以选择创建预定/ cron作业类型的任务,你可以这样做。
如果您无法在服务器上创建计划任务,则另一个选项是在家用PC上创建计划任务,其中每隔几分钟运行一次程序/脚本,只需点击您网站上的特殊网页即可。然后,该页面可以具有检查提醒并将其发送出去的代码。这有点像黑客,但它应该有用。
答案 2 :(得分:1)
查看Quartz.Net(http://quartznet.sourceforge.net/)。您可以在Application_Start事件中创建quartz调度程序的实例,只要ASP.Net应用程序正在运行,它将轮询数据库并触发您向其注册的任何函数。由于您处于共享主机环境中,这可能是您最好的选择,除非您的主机提供商具有可以定期触发WebForm(或ASP.Net MVC控制器)的调度程序。
答案 3 :(得分:0)
首先,您显然需要创建用户界面和数据库来存储提醒。那部分你得到了。下一步是创建一个服务,该服务定期向数据库查询应通知的提醒。
执行此操作的最佳方法是编写一个轻量级Windows服务,正如您所建议的那样,它使用循环和合理的休眠时间(以便不占用CPU)来不断检查数据库是否有提醒和调度通知。然后,它会根据您的要求处理每个提醒。
但是由于您使用的是共享主机,因此无法部署Windows服务,因此下一个最好的方法是在global.asax的Application_Start上运行后台线程。有许多如何做到这一点的例子,例如:
答案 4 :(得分:0)
共享主机无法与您尝试执行的操作一起使用。您可以在Application start上创建一个后台轮询线程,但它会在某个时刻关闭,实际上可能被您的托管公司禁止。您的托管服务商很可能会检测到无限循环,导致您的帐户自动关闭,尤其是在使用相当多的CPU时。正如约翰所建议的那样,您的ISP可能会有计划任务或托管的cron选项,但通常情况下,这些只是用于执行夜间备份,而不是真正具备您所需的粒度级别。
简单的回答是,您最有可能需要托管帐户以外的其他内容。您可能需要查看VPS共享主机服务,或者您可能希望考虑查看MS Azure或Amazon EC2。要做到这一点,您需要创建一个应用程序,或者更好的是,一个不断运行的服务,这是共享主机帐户无法提供的。
答案 5 :(得分:0)
还有一些服务可以定期为您的服务调用特定网页。如果有任何需要发送的提醒,您可以使用它来检查页面。
然而,由于您依赖外部网站无法控制,如果始终发送提醒非常重要,这可能不是理想的解决方案。
答案 6 :(得分:0)
1)创建一个用于存储消息的数据库,其中包含日期戳
2)创建一个SQL作业,选择一个时间段内的所有消息
3)在SQL作业中,您可以初始化基于.net的SQL函数,该函数将使用System.Net.Mail命名空间发送电子邮件。
答案 7 :(得分:0)
您可能会考虑使用缓存过期的'hack'来触发事件。创建在特定日期时间到期的新缓存密钥以运行提醒或使其按定义的时间间隔重复,检查队列以查看是否应发送任何新内容。