2013-02-19 1 views
1

J'ai une fonction qui lit des données à partir d'un Webservice. Avec ces données, je crée des bitmaps. J'envoie les bitmaps aux panneaux (affichages) qui affichent les bitmaps créés. Manuellement son fonctionnement comme charme. Ce dont j'ai besoin maintenant, c'est que mon application exécute cette fonction automatiquement toutes les 5 min dans le Backround.Fonction d'exécution toutes les 5 minutes en arrière-plan

Mon application fonctionne sous IIS. Comment puis je faire ça? Quelqu'un peut-il m'aider avec ça?

Répondre

1

Vous n'avez pas besoin d'être dépendant du projet asp.net, mais vous pouvez utiliser Cache Callback pour le faire. J'ai trouvé une bonne approche, pour le faire. en fait, je ne me souviens pas le lien, donc je vais vous donner un code que j'utiliser:

public abstract class Job 
{ 
    protected Job() 
    { 
     Run(); 
    } 

    protected abstract void Execute(); 
    protected abstract TimeSpan Interval { get; } 

    private void Callback(string key, object value, CacheItemRemovedReason reason) 
    { 
     if (reason == CacheItemRemovedReason.Expired) 
     { 
      Execute(); 
      Run(); 
     } 
    } 

    protected void Run() 
    { 
     HttpRuntime.Cache.Add(GetType().ToString(), this, null, 
      Cache.NoAbsoluteExpiration, Interval, CacheItemPriority.Normal, Callback); 
    } 
} 

Here is the implementation 
public class EmailJob : Job 
{ 
    protected override void Execute() 
    { 
     // TODO: send email to whole users that are registered 
    } 

    protected override TimeSpan Interval 
    { 
     get { return new TimeSpan(0, 10, 0); } 
    } 
} 
+0

Où dois-je mettre cela pour que ma méthode soit exécutée automatiquement? – Paks

+0

Je l'utilise sur des conditions dans le projet entier, mais il suffit de le déclencher une fois, dans global.asax-> Application_Start – IamStalker

3

Une application Asp.Net n'est pas la bonne structure pour une tâche comme celle-ci.

Vous devriez probablement créer un dedicated service pour ce type de tâches.

Une autre option est de créer un scheduled task qui se déroulera toutes les X minutes

Sur une note de côté, si vous doit faire grâce à votre application asp.net, je recommande la lecture sur la façon de Simulate a Windows Service using ASP.NET to run scheduled jobs

+0

Merci je vais avoir un coup d'oeil. Oui, je dois le faire dans asp.net, parce que toute l'application est écrite dans asp.net – Paks

Questions connexes