C # - Лучший способ постоянно проверять процесс - PullRequest
0 голосов
/ 15 апреля 2019

Сценарий: веб-задание Azure, которое получит всю запись о поставщике из NetSuite через WSDL.

Проблема: набор данных слишком большой.Даже с сервисом, установленным на 12 минут тайм-аут.Время истекло, и код не удался.

В NetSuite есть асинхронный процесс, который в основном запускает все, что вы хотите на сервере, и он возвращает JobId, который позволил вам проверить процесс на сервере.

В настоящее время я сделал, выполнивпоисковый вызов сначала запрашивает все записи поставщика, и он должен обрабатываться на сервере.После того, как я получил JobId, я написал пустую рекурсию, которая проверяет, завершено ли задание на сервере с установленным значением Sleep Thread на 10 минут.

 private static bool ChkProcess(VendorsService vendorService, string jobId)
    {
        var isJobDone = false;

        //Recursion 
        void ChkAsyncProgress(bool isFinish)
        {
            if (isFinish) return;

            var chkJobProgress = vendorService.NsCheckProcessStatus(jobId);
            if (chkJobProgress.OperationResult.IsFinish) isJobDone = true;

            Thread.Sleep(TimeSpan.FromMinutes(10));
            ChkAsyncProgress(isJobDone);
        }

        ChkAsyncProgress(false);
        return isJobDone;
    }

Это работает, но есть ли лучший подход?

Спасибо

1 Ответ

0 голосов
/ 15 апреля 2019

Я думаю, что, поскольку вы уже работаете с Azure, с помощью Service BUS вы можете реализовать действительно недорогое решение для этого (если не бесплатно, в зависимости от того, насколько часто выполняется ваша работа)

По сути, это очередь, в которой вы ставите сообщения в очередь (это могут быть также объекты со свойствами, чтобы они также могли потенциально содержать ваш результат разработки).

Сервисная шина используется для постановки в очередь. Функция Azure типа ServiceBusTrigger автоматически прослушивает, если поступило какое-либо новое сообщение на служебной шине, и запускается, если это так (или вы можете установить сообщения, которые будут помещены в очередь, но будут доступны только после определенного времени в будущем).

Итак, в коде веб-задания в конце вы можете добавить код для постановки в очередь сообщения, которое будет отмечать, что веб-работа завершилась.

Функция Azure будет немедленно замечена, как только сообщение попадет в очередь, и вы сможете извлекать данные без постоянного опроса о завершении задания, поскольку Azure позаботится обо всем этом за вас по смешной цене и без каких-либо затрат. усилие вами.

Кроме того, эти задачи оцениваются не на основе своевременности, а на основе исполнения, поэтому вы будете платить только тогда, когда оно фактически поставит сообщение в очередь.

У них есть определенное количество бесплатных казней, поэтому, возможно, вам даже не нужно ничего платить.

Здесь пример кода Microsoft для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...