我正在创建一个在我的Web角色后台运行的消息传递服务。当web角色启动时,它会启动一个每天运行一次的Quartz作业并发送一些电子邮件。我现在将我的网络角色设置为永远不会因为闲置而入睡。这使我的工作无论我的网站上的活动如何都可以执行。
我遇到的问题是,如果我第一次部署时没有访问我的网站,那么工作永远不会开始。我担心如果我的webrole被某些Azure魔法移动到新实例,我的电子邮件服务将无法运行。
作业在Application_Start方法的Global.asax中启动。如何让我的Web角色在部署时自动启动?
- 编辑 -
最初我试图从WebRole.cs OnStart开始我的工作,但后来我从实体框架得到关于我的数据库连接的错误。因此,如果有人知道如何从WebRole.cs OnStart访问我的Web配置中的连接字符串,它也会回答我的问题。
答案 0 :(得分:1)
将您的代码放入 WebRole.cs :
public class WebRole : RoleEntryPoint
{
public override bool OnStart()
{
Task.Factory.StartNew(StartQuartzJob);
return base.OnStart();
}
private void StartQuartzJob()
{
// Do work here.
}
}
此代码在您的实例启动时运行(部署后,重启后,......)。这里的优点是它在不同的进程( WaIISHost.exe )中运行,该进程在您的Web应用程序在IIS中启动之前运行。因此,即使您没有任何请求转到该实例,或者您的应用程序池回收,此过程也将继续运行。请记住,由于这是一个不同的过程,您将无法访问web.config