2015-12-21 4 views
5

Это мой первый раз, когда я сделал вид приложения WebJob. Я создал проект webjob, и в решении он поставляется с Program.cs и Function.cs.Azure WebJob Лучший подход

Я уже удалил Function.cs, потому что в этом проекте нет очереди, из которой я получаю данные.

Сейчас в Program.cs уже есть основной метод, как:

class Program 
{ 
    // Please set the following connection strings in app.config for this WebJob to run: 
    // AzureWebJobsDashboard and AzureWebJobsStorage 
    static void Main() 
    { 
     var host = new JobHost(); 
     // The following code ensures that the WebJob will be running continuously 
     host.RunAndBlock(); 
    } 
} 

Как я понимаю, что RunAndBlock это запустить webjob непрерывно, но я хочу, чтобы работа запустить только один раз. Я хочу контролировать выполнение извне по расписанию. Я хотел бы знать, как сделать мой код только один раз? Как видно ниже, у меня есть класс SupportService, который имеет RunOnePoolProvisioingCycle, я хочу назвать этот метод только один раз. Правильно ли это?

static void Main() 
{ 
    SupportService _supportService = new SupportService(); 
    _supportService.Initialize(); 
    _supportService.SetPoolProvisioningConfigurations(); 
    _supportService.RunOnePoolProvisioningCycle(); 
} 

или этот?

static void Main() 
{ 
    var host = new JobHost(); 
    SupportService _supportService = new SupportService(); 
    _supportService.Initialize(); 
    _supportService.SetPoolProvisioningConfigurations(); 
    host.Call(typeof(SupportService).GetMethod("SetPoolProvisioningConfigurations")); 
} 

или этот?

static void Main() 
{ 
    var host = new JobHost(); 
    SupportService _supportService = new SupportService(); 
    _supportService.Initialize(); 
    _supportService.SetPoolProvisioningConfigurations(); 
    host.CallAsync(typeof(SupportService).GetMethod("SetPoolProvisioningConfigurations")); 
} 

или я должен использовать:

host.Start() 

или

host.StartAsync()? 
+0

Я считаю, что все ответы здесь верны, поскольку мой вопрос касается подхода. но я должен выбрать один. это примечание для тех, кто видит это сообщение. –

ответ

4

То, что вы видите часть SDK, который не является обязательным. Веб-приложение может быть таким же простым, как консольное приложение, которое вы загружаете, загружаете и запускаете как есть.

Так что этот код кажется самый лучший вариант в вашем случае:

static void Main() 
{ 
    SupportService _supportService = new SupportService(); 
    _supportService.Initialize(); 
    _supportService.SetPoolProvisioningConfigurations(); 
    _supportService.RunOnePoolProvisioningCycle(); 
} 
+0

, так что это будет первый код, который вызывает службу поддержки напрямую. , но я прочитал SDK, предоставленный в MSDN, и я действительно ничего не мог понять. вы рекомендуете любую документацию для класса JobHost и свойств и функций. и когда я должен использовать каждого из них, и какова наилучшая практика каждого из них? –

+0

Да, я бы использовал первый код, который вы предлагаете. SDK отлично справляется с раскрытием хранилища Azure в виде набора триггеров и потоков; в этом случае хозяин играет роль «бесконечного цикла». – benjguin

1

WebJob созданный шаблон использует WebJobs SDK. Если вам не нужно использовать какие-либо функции SDK, вы можете просто создать консольное приложение и настроить расписание CRON для его запуска (см. «Запланированные задания» here).

Я связался с дополнительной информацией о SDK WebJobs выше. Помимо облегчения сценариев, в которых вы хотите запускать функции в очередях/блоках/и т. Д., Он также имеет возможность запускать ваши задания по расписанию через TimerTrigger (входит в состав SDK extensions). Дайте этим материалам прочитать, чтобы узнать, что лучше всего подходит вашим потребностям.

Смежные вопросы