Sql Azure的计划任务?

Sql Azure的计划任务?,azure,scheduled-tasks,azure-sql-database,Azure,Scheduled Tasks,Azure Sql Database,我想知道是否有一种方法可以将计划任务与SQL Azure一起使用? 感谢您的帮助 关键是,我希望每天运行一个简单的单行语句,并希望防止设置工作角色。目前没有SQL Azure的SQL代理。您必须从后台任务调用单行语句。但是,如果您已经有一个Web角色,您可以轻松地生成一个线程来在Web角色中处理此问题,而无需创建工作角色。我在博客上写了这个概念。要生成线程,可以在OnStart()事件处理程序(其中角色实例尚未添加到负载平衡器)或Run()方法(其中角色实例已添加到负载平衡器)中进行。通常,最好

我想知道是否有一种方法可以将计划任务与SQL Azure一起使用? 感谢您的帮助


关键是,我希望每天运行一个简单的单行语句,并希望防止设置工作角色。

目前没有SQL Azure的SQL代理。您必须从后台任务调用单行语句。但是,如果您已经有一个Web角色,您可以轻松地生成一个线程来在Web角色中处理此问题,而无需创建工作角色。我在博客上写了这个概念。要生成线程,可以在OnStart()事件处理程序(其中角色实例尚未添加到负载平衡器)或Run()方法(其中角色实例已添加到负载平衡器)中进行。通常,最好在OnStart()中进行设置


一个可能不明显的警告是,无论您是在自己的工作者角色中执行此调用,还是在现有Web角色的后台线程中执行此调用:如果您将角色扩展到(例如)两个实例,则需要确保每日调用仅从其中一个实例发生(否则,可能会导致重复操作,或者多次执行可能代价高昂的操作)。您可以使用一些技术来避免这种情况,例如表行锁或Azure存储blob租约。使用前者,您可以使用该行存储上次执行操作的时间戳。如果获得锁,您可以检查操作是否在设置的时间窗口内发生(可能是一小时?)确定其他实例是否已经执行了该命令。如果无法获取锁,则可以假定另一个实例拥有该锁并正在执行该命令。还有其他技术—这只是一个想法。

除了David的答案之外,如果要执行大量计划任务,则可能值得一看:

  • lokad.cloud-能够很好地处理定期任务-
  • quartz.net-这是一个很好的全方位调度解决方案-

(您可以在David提到的线程中使用quartz.net,但lokad.cloud需要稍大的架构更改)

我希望谈论您自己的公司是可以接受的。我们有一个基于web的服务,允许您这样做。您可以单击此链接查看有关如何执行的更多详细信息。

为了克服多个角色执行同一任务的问题,您可以检查角色实例id,并确保只有第一个实例将执行该任务。

using Microsoft.WindowsAzure.ServiceRuntime;

        String g = RoleEnvironment.CurrentRoleInstance.Id;
        if (!g.EndsWith("0"))
        {
            return;
        }

嗯。但我只有一个WCF服务角色。WCF服务角色是否也会过载?术语“角色”与“虚拟机模板”同义。所有Windows Azure角色都等同于Windows Server 2008 SP2或Windows Server 2008 R2。而且,与Web角色和工作角色一样,WCF Web角色具有OnStart()和Run()。您可以在其中任何一个中运行后台任务。感谢您的回答。这是一个很大的帮助;)+1对于预构建的调度框架。Lokad选项是构建Windows Azure应用程序的更大解决方案集的一部分,如果您只需要安排时间,quartz.net解决方案似乎更适合。我会去投票支持此功能!