Im coincé en essayant d'appeler une méthode toutes les 10 secondes, j'ai lu sur les minuteries et les threads mais le problème est que je ne sais pas où mettre la méthode à déclencher, les projets MVC ont un 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();
     }

Le code qui doit télécharger certaines colonnes de tables dans la base de données. Je ne sais pas comment déclencher cette méthode toutes les x secondes

1
Eleazar 21 juin 2019 à 02:01

3 réponses

Meilleure réponse

J'utiliserais JavaScript pour y parvenir.

Au bas de votre fichier View (* .cshtml) ajoutez ce code:

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

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

Explication:

<script type="text/javascript">

Ceci est le code HTML que vous écrivez des scripts dans le langage JavaScript

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

Définit l'intervalle à 10 secondes (en millisecondes)

Utilise ensuite la fonction JavaScript pour répéter les exécutions sur un intervalle. Pour en savoir plus, consultez W3 Schools

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

Cette fonction utilise Ajax dans jQuery pour appeler une API. Qui existe dans votre contrôleur. Vous n'avez pas partagé le nom de votre contrôleur alors remplacez le code en conséquence, la méthode ressemble à une méthode get pour moi mais c'est post puis changez $.get en $.post. La fonction après le chemin de l'url est exécutée lors du rappel de votre demande. Pour l'instant, pour que ce soit clair pendant le test, il exécute la ligne alert( "Load was performed.") qui fera apparaître une boîte de dialogue dans votre navigateur; si vous voulez écrire quelque chose dans le html après avoir exécuté la requête, vous pouvez le faire ici.

* Remarque jQuery est inclus dans la boîte dans les projets MVC C #. Dans votre fichier \shared\_Layout.cshtml, vous verrez sa référence dans une section au bas de la page.

0
Phil Peters 20 juin 2019 à 23:32

1) Si votre application va être hébergée sur un serveur ou une machine virtuelle (VM), vous pouvez créer un service de fenêtre et enregistrer le service sur le même.

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) Si votre application doit être hébergée sur Azure pass, vous pouvez utiliser des travaux Web Azure pour la même chose. Url: https://docs.microsoft.com/en- us / azure / app-service / webjobs-create

0
Nilesh sonawane 24 juin 2019 à 07:46

Vous voudrez peut-être étudier les API de planification et les outils tiers. Hangfire (https://www.hangfire.io/) en est un que j'ai utilisé avec succès

2
Jonathan 20 juin 2019 à 23:15