Интересно, есть ли способ использовать запланированные задачи с SQL Azure? Любая помощь приветствуется.
Дело в том, что я хочу запускать простой однострочный оператор каждый день и не хочу настраивать рабочую роль.
Интересно, есть ли способ использовать запланированные задачи с SQL Azure? Любая помощь приветствуется.
Дело в том, что я хочу запускать простой однострочный оператор каждый день и не хочу настраивать рабочую роль.
Сегодня нет эквивалента агента SQL для SQL Azure. Вам придется вызывать однострочный оператор из фоновой задачи. Однако, если у вас уже есть веб-роль, вы можете легко создать поток для обработки этого в своей веб-роли, не создавая рабочую роль. Я писал о концепции здесь. Чтобы создать поток, вы можете сделать это либо в обработчике событий OnStart () (где экземпляр Role еще не добавлен в балансировщик нагрузки), либо в методе Run () (где экземпляр Role был добавлен в загрузку). балансир). Обычно рекомендуется выполнять настройку в OnStart ().
Одно предостережение, которое может быть неочевидным, независимо от того, выполняете ли вы этот вызов в его собственной рабочей роли или в фоновом потоке существующей веб-роли: если вы масштабируете свою роль, скажем, до двух экземпляров, вам нужно убедиться, что ежедневный вызов происходит из одного из экземпляров (в противном случае вы можете получить либо дубликаты, либо, возможно, дорогостоящую операцию, выполняемую несколько раз). Есть несколько методов, которые можно использовать, чтобы избежать этого, например блокировка строк таблицы или аренда больших двоичных объектов службы хранилища Azure. В первом случае вы можете использовать эту строку для хранения метки времени последнего выполнения операции. Если вы получили блокировку, вы можете проверить, произошла ли операция в течение установленного временного окна (может быть, часа?), Чтобы решить, выполнил ли ее уже один из других экземпляров. Если вам не удалось получить блокировку, вы можете предположить, что другой экземпляр имеет блокировку и выполняет команду. Есть и другие техники - это всего лишь одна идея.
В дополнение к ответу Дэвида, если у вас много запланированных задач, возможно, стоит взглянуть на:
(Вы можете использовать quartz.net в теме, о которой упоминал Дэвид, но lokad.cloud потребует немного большего архитектурного изменения)
Я надеюсь, что можно говорить о вашей собственной компании. У нас есть веб-сервис, который позволяет вам это делать. Вы можете щелкнуть эту ссылку, чтобы узнать больше о том, как запланировать выполнение запросов SQL Azure.
Чтобы преодолеть проблему того, что несколько ролей выполняют одну и ту же задачу, вы можете проверить идентификатор экземпляра роли и убедиться, что только первый экземпляр будет выполнять задачу.
using Microsoft.WindowsAzure.ServiceRuntime;
String g = RoleEnvironment.CurrentRoleInstance.Id;
if (!g.EndsWith("0"))
{
return;
}