IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Tâche récurrente, équivalent cron?


Sujet :

ASP.NET

  1. #1
    Membre chevronné Avatar de Ceddoc
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 493
    Par défaut Tâche récurrente, équivalent cron?
    Bonjour,

    Situation:

    Pour simplifier, j'ai un site de type forum et j'aimerais faire en sorte que si un message n'a pas de réponse au bout de deux heures, les admins soient avertis par mail. Et même si personne ne s'est connecté au forum pendant ce laps de temps.

    Environnement technique:


    C'est sur un Windows Serveur 2003 avec IIS6 qui va prochainement être migré en 2008 r2 IIS7
    J'ai accès au serveur en tant qu'administrateur.
    Le site est développé en ASP.NET C#

    Problématique:
    J'aimerais que cette vérification soit faite toutes les 2 heures par exemple, l'idéal serait qu'elle soit intégrée au site.
    J'aimerais dans la mesure du possible éviter une méthode "externe" au site (tâche/service) afin qu'il y ai moins de risques que cette tâche soit oubliée à un moment ou a un autre et que cette fonctionnalité ne marche plus.

    Quelles sont mes possibilités? Vos recommandations?

    Lors de mes recherches j'ai trouvé différentes façons (celle la par exemple mais ça m'a l'air d'un fonctionnement un peu "bâtard" difficile à maintenir par un autre que par son créateur.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 190
    Par défaut
    beuh un thread qui se lance au démarrage de ton site web?

  3. #3
    Membre chevronné Avatar de Ceddoc
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 493
    Par défaut
    Citation Envoyé par BenoitM Voir le message
    beuh un thread qui se lance au démarrage de ton site web?
    Peux tu développer ? Il y a un évènement qui permet de lancer des threads au démarrage d'un site web? De quelle façon? A moins qu'il faille le lancer lors de la première visite du site? Si on lance un thread dans le code page d'une page, est-ce que le thread va s'arrêter si le visiteur quitte?

    J'avoue que je suis novice en la matière.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Par défaut
    Salut,

    Plusieurs réponses possibles, mais dépendantes de ton accès (au code source ? à la base de données uniquement ? )

    Si tu souhaites éviter à tout prix un fonctionnement "externe", tu peux partir sur une solution worklfow ( WF ) qui s'initie à chaque nouveau topic de ton forum. C'est plus tendu à mettre en place, mais tu auras exactement ce que tu souhaites.

    Mais en toute honnêteté, je partirai tout de même sur une tâche planifiée, qui me semble d'un meilleur ratio effort/rendu.

    Bon courage.

  5. #5
    Membre chevronné Avatar de Ceddoc
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 493
    Par défaut
    J'ai accès à tout, code source/bdd/serveur

    Pour ce qui est de la tâche planifiée le principe serait de faire une requête http vers le script sur mon site à intervalles réguliers c'est ça? (Ou bien d'éxécuter directement un script mais je préfère interroger une page spécifique sur mon site)

    Pour la solution "WorkFlow" quelles seraient les grandes lignes?

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 190
    Par défaut
    Jamais fait de web de ma vie donc

    Mais appremiere vue tu as global.asax
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Class Global
    Inherits System.Web.HttpApplication
    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
    ' Se déclenche lorsque l'application est démarrée
    End Sub
    Donc je dirais que dans cette méthode tu démarres un thread

    L'avantage d'une tache planifiée c'est que tu peux la lancer facilement, qu'elle ne perturbera pas ton site web

  7. #7
    Membre chevronné Avatar de Ceddoc
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 493
    Par défaut
    Citation Envoyé par BenoitM Voir le message
    Jamais fait de web de ma vie donc

    Mais appremiere vue tu as global.asax
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Class Global
    Inherits System.Web.HttpApplication
    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
    ' Se déclenche lorsque l'application est démarrée
    End Sub
    Donc je dirais que dans cette méthode tu démarres un thread

    L'avantage d'une tache planifiée c'est que tu peux la lancer facilement, qu'elle ne perturbera pas ton site web
    Ah oui en effet j'ai ces lignes dans mon global.asax

    La solution du global.asax-> Application_Start me plait parce qu'il peut arriver que ce soit des non développeurs qui vont maintenir le serveur web (voir le migrer) et même si je fais une doc du tonnerre je suis pratiquement certain qu'ils ne la liront pas et vont oublier de recréer la tâche dans le nouveau serveur.

    Si quelqu'un peut me confirmer qu'un nouveau thread, avec une sorte de timer qui vérifie tout les x temps ce dont j'ai besoin, lancé avec Application start va marché correctement je vais opter pour cette solution je pense.

  8. #8
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 190
    Par défaut
    Le mieux est peut-être dans la méthode start_application de lancer une application qui elle effectura toutes les 2h le check
    Ainsi, tu gardes l'indépendance entre le site web et l'envois de mail mais tu es sur que celui-ci soit bien lancé

  9. #9
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Malheureusement non ca n'est pas possible en interne! Une application web, si elle n'est pas utilisée, est recyclée. Ce qui fait que si il n'y a pas de visites dans les 2h, la tache ne sera pas executée. Le plus simple est de créer un service windows avec une librairie comme quartz.net ou le planificateur de tâche.

  10. #10
    Membre chevronné Avatar de Ceddoc
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 493
    Par défaut
    Citation Envoyé par Nathanael Marchand Voir le message
    Malheureusement non ca n'est pas possible en interne! Une application web, si elle n'est pas utilisée, est recyclée. Ce qui fait que si il n'y a pas de visites dans les 2h, la tache ne sera pas executée. Le plus simple est de créer un service windows avec une librairie comme quartz.net ou le planificateur de tâche.
    Ca signifie que le thread lancé dans la méthode Application_Start ne marcherait pas si il n'y a pas de visite non plus?

    Sinon je ferais un service mais ça m'emballe moins.

  11. #11
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Le Application_Start ne s'execute qu'à la première requête (ce qui explique que parfois une requête ASP.Net est longue d'ailleurs). Si personne ne fait la première requête, le thread ne sera jamais lancé!

  12. #12
    Membre chevronné Avatar de Ceddoc
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 493
    Par défaut
    A la première requête après démarrage du site dans IIS ou a la première requête après recyclage?

  13. #13
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Ben ca revient au même en fait. Comme expliqué dans l'article que tu as montré, lorsque l'application s'arrête, elle peut pas s'autoredémarrer.
    Cela dit, d'un point de vue architecture, la solution du service windows me parait beaucoup plus propre et élégante car elle permet de séparer correctement les responsabilités.

  14. #14
    Membre chevronné Avatar de Ceddoc
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 493
    Par défaut
    Oui je crois que je vais m'orienter vers un service proprement réalisé et autonome. Ce sera le plus simple et le plus propre et ça me permettra de pratiquer un peu.

    Si on fait un service il faut donc s'orienter vers une librairie externe pour avoir un planificateur digne de ce nom?

  15. #15
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Si tu es développeur java, tu va peut être connaitre: http://quartznet.sourceforge.net/

  16. #16
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 190
    Par défaut
    le planificateur de tache de windows est très bien je pense, si c'est un service windows dans ton cas je vois pas spécialement l'interêt d'intégré un planificateur de tache

    Un Sleep(X) suffit où X se trouve dans un fichier de config

    bon maintenant si tu veux faire plus complexe

  17. #17
    Membre chevronné Avatar de Ceddoc
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 493
    Par défaut
    Citation Envoyé par Nathanael Marchand Voir le message
    Si tu es développeur java, tu va peut être connaitre: http://quartznet.sourceforge.net/
    C'est pour ça que le nom me disait quelque chose ! je l'avais déjà croisé dans des projets mais je ne l'ai jamais mit en place. Je vais m'orienter vers ça.
    Si jamais tu as un tutoriel très basique sous la main je suis preneur, sinon je chercherais aucun problème, merci de ton aide.

    Citation Envoyé par BenoitM Voir le message
    le planificateur de tache de windows est très bien je
    pense
    Oui je pense que ça pourrait suffire mais je préfère faire quelque chose de propre et de bien packagé que "n'importe qui pourra mettre en place très facilement" et le service me permettra d'appliquer plus de concepts théorique que je n'ai pas encore eu le temps d'implémenter. Mais c'est un choix personnel en fonction de ma situation, mes connaissance et mon environnement. Une tâche planifiée pourrait convenir à quelqu'un d'autre.

  18. #18
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Citation Envoyé par BenoitM Voir le message
    le planificateur de tache de windows est très bien je pense, si c'est un service windows dans ton cas je vois pas spécialement l'interêt d'intégré un planificateur de tache

    Un Sleep(X) suffit où X se trouve dans un fichier de config

    bon maintenant si tu veux faire plus complexe
    Certes mais quartz t'offre quand même une souplesse assez sympa due aux expressions CRON: un job configuré pour s'executer toutes les 3minutes des jours impairs uniquement un mois sur deux, c'est difficile à programmer avec un Sleep

    Citation Envoyé par Ceddoc Voir le message
    C'est pour ça que le nom me disait quelque chose ! je l'avais déjà croisé dans des projets mais je ne l'ai jamais mit en place. Je vais m'orienter vers ça.
    Si jamais tu as un tutoriel très basique sous la main je suis preneur, sinon je chercherais aucun problème, merci de ton aide.
    Pour appréhender le truc je me suis toujours servi de leur how-to qui permet déjà de faire un bon tour des fonctionnalités

    Citation Envoyé par Ceddoc Voir le message
    Oui je pense que ça pourrait suffire mais je préfère faire quelque chose de propre et de bien packagé que "n'importe qui pourra mettre en place très facilement" et le service me permettra d'appliquer plus de concepts théorique que je n'ai pas encore eu le temps d'implémenter. Mais c'est un choix personnel en fonction de ma situation, mes connaissance et mon environnement. Une tâche planifiée pourrait convenir à quelqu'un d'autre.
    Et c'est un très bon raisonnement! Si tu fais un truc propre, tu peux te servir de ca pour faire une base de plateforme d'orchestration avec plusieurs taches programées: toutes les 2h le mail sur le sujets sans réponses, a minuit un nettoyage des forums, etc. Si en plus tu utilises des architectures modulaires (MEF par exemple). Il te suffit de développer un projet Core et de le lancer. Après, tu pourras brancher à chaud différents modules en mettant simplement la dll dans le dossier. Mais bon la c'est un autre domaine...

  19. #19
    Membre chevronné Avatar de Ceddoc
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 493
    Par défaut
    Citation Envoyé par Nathanael
    Et c'est un très bon raisonnement! Si tu fais un truc propre, tu peux te servir de ca pour faire une base de plateforme d'orchestration avec plusieurs taches programées: toutes les 2h le mail sur le sujets sans réponses, a minuit un nettoyage des forums, etc. Si en plus tu utilises des architectures modulaires (MEF par exemple). Il te suffit de développer un projet Core et de le lancer. Après, tu pourras brancher à chaud différents modules en mettant simplement la dll dans le dossier. Mais bon la c'est un autre domaine...
    Ne nous emballons pas

    Je fais déjà plus que demandé, autant par conscience professionnelle que par volonté de progresser mais je ne peux pas non plus me permettre de passer trop de temps à concevoir un projet qui ne sera surement jamais évolué

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème envoi mail par tâche planifiée quotidienne CRON
    Par pompiste dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 18/10/2010, 13h22
  2. équivalent cron sous Windows
    Par betaphp dans le forum Autres Logiciels
    Réponses: 9
    Dernier message: 08/09/2010, 11h38
  3. Réponses: 2
    Dernier message: 11/05/2009, 18h31
  4. Exécuter une tâche planifiée avec cron
    Par Olivier Regnier dans le forum Administration système
    Réponses: 6
    Dernier message: 30/03/2007, 21h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo