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

因为这个网站是共享的服务器上托管,我们没有在服务器上的任何控制运行任何SQL作业或调度应用程序。

有没有在asp.net任何可以在这种情况下帮助?

有帮助吗?

解决方案

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

在一个点上这个技术被对堆栈溢出使用,尽管我不认为这是任何更多。

要诚实它看起来像一个讨厌的,容易出错的劈我,但如果你无法除非你的网站服务器上运行任何东西,然后像这可能是你唯一的选择。

其他提示

您必须在服务器上完成的工作,但你必须从ASP.NET触发它没有什么好办法?

如何创建将开始自己的工作,并有一个计时器运行在其他地方(即另一台计算机上),请求该页面的网页。 (只是击中页面触发你的工作)

我有同样的问题,因为你和我结束了一个编程服务,利用Quartz.NET: HTTP: //quartznet.sourceforge.net/ 并连接到相同的数据库中的网站。

使用ASP.NET你不能保证自己的应用活着在所有时间,因此web应用作为用于调度解决方案的宿主过程是不可行的IMO。

一个Windows服务是您所需要的这种情况。您有启动和停止的过程,以及监视应用程序的方式完全控制。

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

如果你真的对服务器无法控制(意思是,你不能使用SQL作业,计划任务,或者安装一个Windows服务器),那么你可以使用的 System.Threading.Timer 您在Global.asax中初始化(例如,在应用程序启动时)调用一个在应用程序中的某些方法每隔X分钟。然后,此方法将查询数据库,看看需送什么通知。

这实在不是一个可取的办法虽然,因为计时器不能保证就总是调用,因为我知道,因为,像彼得说,你的Web应用程序不能保证是活在任何时候。

不过,根据您的需求,它仍然是一个“足够好”的方法,如果你没有其他的选择。

但是,如果你真的是完全卡住,别无选择,只能托管在你的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可能会在此期间被重置, 在这种情况下,你会错过它。

这真的不希望这样做,但你可以做什么金酸莓的建议。我已经看到它做了很多次。虽然难看,有时雅只需要做丑陋黑客。

使用这种方法虽然,你必须确保你的应用程序没有卸载。因此,你需要某种形式的存留。我建议建立一个网络监控工具,将不断拉页(ASPX),以保持应用程序活着。这些人是免费 http://mon.itor.us/

  

我不相信的你,是因为源   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文件不   提供源的任何信息   折轴编译)每个尖端   欢迎!

我在第一以及麻烦,但是这是因为必要的AsemblyInfo.cs被包含在父文件夹。此外,你需要补充的是包含三个DLL文件。

我不相信的你,因为Quartz.Net(1.0和1.0.1)的源代码不会在Visual Studio.Net 2005年和2008年获得Quartz.Net的唯一方法编译是使用整个春天达网络包,其中下VS.Net编译罚款2005和2008

除非你能分享一些技巧,如何编译和在asp.net项目中使用的Quartz.dll! (Quartz.Net和README.TXT的网页不提供关于源折轴汇编任何信息)每个末端被欢迎!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top