我有一个MVC网站,它发布到Azure,它使用Azure SQL数据库。
我们需要运行计划任务来发送短信提醒的时候到了。我的印象是Azure Web Jobs非常适合这种情况,但是在启动和运行时遇到了一些问题。
我已经在我的网站解决方案中添加了一个控制台应用程序,并通过控制台应用程序(我希望将其作为Web作业发布)引用EF数据模型。
当前的控制台应用程序如下所示:
class Program
{
static void Main(string[] args)
{
JobHost host = new JobHost();
host.RunAndBlock();
}
public static void ProcessNotifications()
{
var uow = new KirkleesDatabase.DAL.UnitOfWork();
uow.CommunicationRepository.SendPALSAppointmentReminders();
}
}
运行控制台应用程序将抛出异常:
其他信息:缺少用户帐户连接字符串。这可以通过'AzureJobsData'连接字符串或通过构造函数设置。
这表明Web作业专门寻找指向存储帐户的连接字符串。但是,我希望Web作业可以查询Azure数据库,而不是使用存储。
这可行吗?
谢谢,
答案 0 :(得分:2)
正如Victor写的那样,sdk事件是由blob,队列和表触发的 一个满足您需求的简单解决方案:使用pollig方法编写控制台应用程序。不需要sdk。 http://blog.amitapple.com/post/73574681678/git-deploy-console-app/
开头的详细信息while(true)
{
if ("isthereworktodo?")
{
var uow = new KirkleesDatabase.DAL.UnitOfWork();
uow.CommunicationRepository.SendPALSAppointmentReminders();
}
Thread.Sleep(10000); // set an appropriate sleep interval
}
答案 1 :(得分:1)
不幸的是,WebJobs SDK不支持SQL数据库作为触发器。对于触发器,它仅支持Azure存储(blob,队列和表)。
您可以从此作业中访问Azure SQL数据库,如此answer。
中所示答案 2 :(得分:0)
要创建一个Web作业,您不必使用webjobs sdk,您可以使用多种类型的可执行文件(.exe,.cmd,.js,.php,.py,...)。
尝试使用这个新的visual studio插件:http://visualstudiogallery.msdn.microsoft.com/f4824551-2660-4afa-aba1-1fcc1673c3d0,按照那里的步骤链接您的Web应用程序和控制台应用程序,这些应用程序将在发布到您的Azure站点时部署为webjob。