Как вызывать метод каждые 10 секунд с помощью c # asp.net MVC? - PullRequest
0 голосов
/ 21 июня 2019

Я застрял, пытаясь вызвать метод каждые 10 секунд, я читал о таймерах и потоках, но проблема в том, что я не знаю, куда поместить метод для запуска, проекты MVC имеют Main?

    private async Task ActualizarPrecios()
      {
        Entities model = new Entities();
        var transaciones = model.Transacciones.Where(a => a.ESTADO == 
         true).ToList();
        string Url = ObtenerUrl(model);

        ApiForex.IniciarCliente();

        ProcesarRequest procesar = new ProcesarRequest();
        JObject divisas = await procesar.CargarJson(Url);

        foreach(Transacciones item in transaciones)
        {
          item.PRECIO_ACTUAL = (string)divisas["rates"][item.DIVISA] 
        ["rate"];
        }
        model.SaveChanges();
     }

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

Ответы [ 3 ]

2 голосов
/ 21 июня 2019

Возможно, вы захотите изучить API планирования и сторонние инструменты.Hangfire (https://www.hangfire.io/) - это то, что я успешно использовал

0 голосов
/ 24 июня 2019

1) Если ваше приложение будет размещаться на сервере или виртуальной машине (ВМ), вы можете создать службу windows и зарегистрировать службу на ней.

URL: https://www.aspsnippets.com/Articles/Simple-Windows-Service-that-runs-periodically-and-once-a-day-at-specific-time-using-C-and-VBNet.aspx

2) Если ваше приложение будет размещаться на Azure Pass, вы можете использовать для него веб-задания Azure. URL: https://docs.microsoft.com/en-us/azure/app-service/webjobs-create

0 голосов
/ 21 июня 2019

Я бы использовал JavaScript для достижения этой цели.

В нижней части файла View (* .cshtml) добавьте этот код:

<script type="text/javascript">
 var interval = 10000; 
 setInterval(function() { Update() }, interval);

 function Update(){
     $.get("/[ControllerName]/ActualizarPrecios", function(){
         alert( "Load was performed.")}
     );
 } 
</script>

Пояснение:

<script type="text/javascript">

Это HTML означает, что вы пишете скрипты на языке JavaScript

var interval = 10000; setInterval(function() { Update() }, interval);

Устанавливает интервал в 10 секунд (в миллисекундах)

Затем используется функция JavaScript для повторения выполнений с интервалом, подробнее см. W3 Schools

function Update(){
     $.get("/[ControllerName]/ActualizarPrecios", function(){
         alert( "Load was performed.")}
     );
 } 

Эта функция использует Ajax в jQuery для вызова API. Который существует в вашем контроллере. Вы не поделились именем своего контроллера, поэтому замените код соответствующим образом, метод выглядит для меня как метод get, но это post, затем измените $.get на $.post. Функция после пути URL выполняется при обратном вызове по вашему запросу. Сейчас, чтобы прояснить это во время тестирования, он запускает строку alert( "Load was performed."), которая откроет диалоговое окно в вашем браузере; если вы хотите что-то записать в html после выполнения запроса, вы можете сделать это здесь.

* Примечание. JQuery входит в комплект поставки в проектах MVC C #. В вашем файле \shared\_Layout.cshtml вы увидите его ссылку в разделе внизу страницы.

...