Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure WebRole中的Quartz.Net作业_Azure_Azure Worker Roles - Fatal编程技术网

Azure WebRole中的Quartz.Net作业

Azure WebRole中的Quartz.Net作业,azure,azure-worker-roles,Azure,Azure Worker Roles,我目前正在将一个WCF服务项目移植到Azure角色。到目前为止,包含该服务的库还托管了一个Quartz.Net JobFactory,用于一些轻量级的后台处理(定期清理过时的电子邮件确认令牌)。我是否必须将该代码移动到单独的工作者角色中?不,您不必设置单独的工作者角色 您只需在Web角色的OnStart()方法中启动一个后台线程。给该线程一个计时器对象,该对象在给定的时间跨度后执行您的方法 因此,您可以避免使用新的工作人员角色 类MyWorkerThread { 专用计时器{get;set;}

我目前正在将一个WCF服务项目移植到Azure角色。到目前为止,包含该服务的库还托管了一个Quartz.Net JobFactory,用于一些轻量级的后台处理(定期清理过时的电子邮件确认令牌)。我是否必须将该代码移动到单独的工作者角色中?

不,您不必设置单独的工作者角色

您只需在Web角色的OnStart()方法中启动一个后台线程。给该线程一个计时器对象,该对象在给定的时间跨度后执行您的方法

因此,您可以避免使用新的工作人员角色

类MyWorkerThread
{
专用计时器{get;set;}
public ManualResetEvent WaitHandle{get;private set;}
私有无效工作(对象状态)
{
//做点什么
}
公开作废开始()
{
//每60分钟执行一次计时器
WaitHandle=新的ManualResetEvent(错误);
计时器=新计时器(DoWork,null,TimeSpan.Zero,TimeSpan.FromMinutes(60));
//等待结束
WaitHandle.WaitOne();
}
}
类WebRole:RoleEntryPoint
{
私有MyWorkerThread workerThread;
public void OnStart()
{
workerThread=新的MyWorkerThread();
线程线程=新线程(workerThread.Start);
thread.Start();
}
公共空间
{
//断线
workerThread.WaitHandle.Set();
}
}

上面的答案对我帮助很大,但它有一个问题,OnStart方法不会被覆盖,因此永远不会调用该方法。它也应该是布尔值,而不是void。这对我很有用:

public override bool OnStart()
{
    // For information on handling configuration changes
    // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.

    workerThread = new MyWorkerThread();
    Thread thread = new Thread(workerThread.Start);
    thread.Start();

    return base.OnStart();
}

即使在一小时内没有访问网站,计时器事件也会执行吗?我知道IIS可以关闭非活动站点,但我不知道Azure在这种情况下的行为。