0

我正在创建一个在我的网络角色后台运行的消息传递服务。当 web 角色启动时,它会启动一个 Quartz 作业,该作业每天运行一次并发送一些电子邮件。我现在将我的网络角色设置为永远不会因为空闲而入睡。无论我的网站上的活动如何,这都允许我的工作执行。

我遇到的问题是,如果我在首次部署站点时不访问我的站点,则该工作永远不会开始。我担心如果我的 webrole 被某些 Azure 魔法移动到一个新实例,我的电子邮件服务将无法运行。

该作业在 Application_Start 方法中的 Global.asax 中启动。如何让我的 Web 角色在部署后自动启动?

-编辑-

最初我试图从 WebRole.cs OnStart 开始我的工作,但后来我从实体框架中收到有关我的数据库连接的错误。因此,如果有人知道如何从 WebRole.cs OnStart 访问我的 Web 配置中的连接字符串,那也会回答我的问题。

4

1 回答 1

1

将您的代码放在您的WebRole.cs中:

public class WebRole : RoleEntryPoint
{
    public override bool OnStart()
    {
        Task.Factory.StartNew(StartQuartzJob);
        return base.OnStart();
    }

    private void StartQuartzJob()
    {
        // Do work here.            
    }
}

此代码在您的实例启动时运行(部署后、重启后......)。此处的优点是它在您的 Web 应用程序在 IIS 中启动之前运行的不同进程 ( WaIISHost.exe ) 中运行。因此,即使您没有任何请求发送到该实例,或者如果您的应用程序池回收,此过程也将继续运行。请记住,由于这是一个不同的过程,您将无法访问 web.config

于 2012-12-03T21:25:59.397 回答