begin process at 2012 02 14 04:21:44
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

ASP.Net

 > EXECUTER UNE PROCÉDURES AUTOMATIQUEMENT ET RÉGULIÈREMENT TOUTS LES N MS

EXECUTER UNE PROCÉDURES AUTOMATIQUEMENT ET RÉGULIÈREMENT TOUTS LES N MS


 Information sur la source

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :ASP.Net Source .NET ( DotNet ) Classé sous :automatisme, application, procédure, iis Niveau :Débutant Date de création :07/01/2005 Date de mise à jour :10/01/2005 01:41:19 Vu :14 419

Auteur : jesusonline

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note


 Description

Comment faire une action toutes les x heures est une question souvent posé sur le forum.
Voici l'astuce pour arriver à faire executer un bout de code à asp.net de facon regulière automatiquement.

L'astuce consiste simplement à mettre un timer dans l'application_start du global.asax.

Le code ci dessous utilise un thread pour obtenir un code plus efficace et aussi plus "joli"

Ce code est volontairement tres simple, il n'est pas la pour faire des opérations compliqués. Il enregistre toutes les 10sec la date dans un fichier de Log.

Ce qui est important c'est la facon dont le code fonctionne.
Premièrement quand une application web se charge, la procédure Application_Start est déclenché. Celle ci n'est declenché seulement la premiere fois qu'un visiteur ouvre le site, pour qu'elle soit ensuite redemarré il faut que le serveur IIS soit redemarré. Attention si vous tester ce code, pour arreter l'ecriture du log, il faut arreter IIS !!!

Ensuite une fois qu'Application_Start est lancé, on instancie notre classe, on demarre Start dans un autre thread.

Une fois le thread lancé, la procédure start de la classe test est executé, le timer est créer, attention l'interval est en ms !!! Ensuite on associe la fonction EcrireLog a chaque fois que le timer est "Elapsed" puis on lance le timer, et désormais toute les 10  sec le fichier test.log aura une ligne de plus.

Je rappel que pour arreter l'ecriture du fichier log, il faut redemarrer IIS !!!

Cet astuce ne fonctionne pas chez tout les hebergeurs, les hebergeurs mutualisé stop l'application s'il n'y a plus aucun activité dessus, a 10 min par défaut apparemment.

Source

  • 'Fichier global.asax.vb
  • Imports System.Web
  • Imports System.Web.SessionState
  • Imports System.IO
  • Imports System.Threading
  • Public Class Global
  • Inherits System.Web.HttpApplication
  • Private oThread As Thread
  • Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
  • ' Se déclenche lorsque l'application est démarrée
  • 'on instancie la classe, donne l'adresse de départ du thread, puis lance le thread
  • Dim oTest As New Test
  • oThread = New Thread(AddressOf oTest.Start)
  • oThread.Start()
  • End Sub
  • Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
  • ' Se déclenche lorsqu'une erreur se produit
  • oThread.Abort()
  • End Sub
  • Sub Application_End(ByVal sender As Object, ByVal e As EventArgs)
  • ' Se déclenche lorsque l'application se termine
  • oThread.Abort()
  • End Sub
  • End Class
  • Public Class Test
  • Private _Fichier As String = "C:\Inetpub\wwwroot\TestVB2003\Test.log"
  • 'Fonction start sans argument pour le thread !
  • Public Sub Start()
  • Dim oTimer As New Timers.Timer(10000) 'Attention interval en ms
  • AddHandler oTimer.Elapsed, AddressOf EcrireLog
  • oTimer.Start()
  • End Sub
  • Public Sub EcrireLog(ByVal s As Object, ByVal e As System.Timers.ElapsedEventArgs)
  • Dim LogStream As New StreamWriter(_Fichier, True, System.Text.Encoding.UTF8)
  • Try
  • LogStream.WriteLine(Now())
  • LogStream.Close()
  • Catch
  • 'erreur, impossible d'ecrire dans le fichier
  • End Try
  • End Sub
  • End Class
'Fichier global.asax.vb 

Imports System.Web
Imports System.Web.SessionState
Imports System.IO
Imports System.Threading

Public Class Global
    Inherits System.Web.HttpApplication

    Private oThread As Thread

    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
        ' Se déclenche lorsque l'application est démarrée

        'on instancie la classe, donne l'adresse de départ du thread, puis lance le thread 
        Dim oTest As New Test
        oThread = New Thread(AddressOf oTest.Start)
        oThread.Start()
    End Sub

    Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
        ' Se déclenche lorsqu'une erreur se produit
        oThread.Abort()
    End Sub

    Sub Application_End(ByVal sender As Object, ByVal e As EventArgs)
        ' Se déclenche lorsque l'application se termine
        oThread.Abort()
    End Sub

End Class


Public Class Test

    Private _Fichier As String = "C:\Inetpub\wwwroot\TestVB2003\Test.log"

    'Fonction start sans argument pour le thread !
    Public Sub Start()
        Dim oTimer As New Timers.Timer(10000)  'Attention interval en ms 
        AddHandler oTimer.Elapsed, AddressOf EcrireLog
        oTimer.Start()
    End Sub

    Public Sub EcrireLog(ByVal s As Object, ByVal e As System.Timers.ElapsedEventArgs)

        Dim LogStream As New StreamWriter(_Fichier, True, System.Text.Encoding.UTF8)
        Try
            LogStream.WriteLine(Now())
            LogStream.Close()
        Catch
            'erreur, impossible d'ecrire dans le fichier
        End Try

    End Sub

End Class

 Conclusion

Pour pouvoir directement tester le code il suffit de changer l'adresse du fichier d'inclure le code dans le global.asax.vb et bien sur avoir accordé l'autorisation d'ecriture  à aspnet.

Ce code risque surement d'évoluer pour avoir un meilleur controle sur le thread (arreté mettre en pause, redemarré etc...) , il vous sera tout de meme utile comme point de départ.

N'hésiter pas à donner vos impressions sur ce code via les commentaires et une petite note fait toujours plaisir.


 Historique

07 janvier 2005 02:15:22 :
10 janvier 2005 01:41:19 :
Precision

 Sources du même auteur

Source avec Zip Source .NET (Dotnet) UTILISATION DE LA MÉTHODE SORT ET SORTDIRECTION AVEC UN GRID...
Source .NET (Dotnet) RESPONSE.FILTER : MANIPULATION DU STREAM DE SORTIE ASP.NET
Source avec Zip Source .NET (Dotnet) OPTIMISATION DE LA SERIALISATION JSON POUR LES LIST<T>
Source avec Zip Source .NET (Dotnet) CRAWLABLELINKBUTTON : UPDATEPANEL ET RÉFÉRENCEMENT
Source .NET (Dotnet) POSTBACKCONTROL - COMMUNICATION CLIENT/SERVEUR AVEC LES UPDA...

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) GUESTBOOK AVEC GRIDVIEW par DanMor498
Source avec Zip CHECKED DROPDOWNLIST par fredzool
Source avec Zip Source avec une capture Source .NET (Dotnet) GRIDVIEW WITH TREEVIEW AND CALLBACK par fredzool
Source avec Zip APPELLER UN WEBSERVICE DEPUIS JAVASCRIPT par fredzool
Source avec Zip Source .NET (Dotnet) MONEY TEXTBOX WITH EMBEDED JAVASCRIPT par fredzool

 Sources en rapport avec celle ci

Source .NET (Dotnet) MASQUER LA VERSION D'ASP.NET DANS LE HEADER HTTP SANS FILTRE... par poppyto
Source .NET (Dotnet) COMMENT CONSERVER L'ÉTAT D'UNE VARIABLE (SESSION ET VIEWSTAT... par jesusonline
Source .NET (Dotnet) ASP.NET - COMMENT OBTENIR DANS LA PAGE WEB COURANTE LE N° DE... par fabrice69
Source .NET (Dotnet) PROCEDURE STOCKÉ QUI RETOURNE DES VALEURS ? NON ET SI VOILOU... par tribals
EXECUTION D'UNE APPLICATION A PARTIR DE ASP par sam2001

Commentaires et avis

Commentaire de jcq le 07/01/2005 08:51:33

Salut cyril, excellent exemple, par contre je ne suis pas d'accord (enfin je vais retester dans la journée) sur le fait qu'Application_Start est déclenché au démarrage de IIS...
Sur un hébergement mutualisé par exemple, ton application est déchargé de la mémoire si aucun visiteur ne va dessus au bout d'un certain temps(je ne connais pas le temps par défaut, mais c de l'ordre d'une dizaine de minutes je pense), et elle est rechargée dès qu'un visiteur va sur le site(pour cette raison que c'est plus long à afficher dès fois).

Sinon ben ton exemple est comme d'habitude très bien fait, je pense que je vais l'utiliser pour déclencher tous les jours l'envoi d'un rapport...

jean-claude

Commentaire de Senynium X le 07/01/2005 09:01:03

D'accord avec Jean-Claude, (mais je l'ai pas encore testé).
Code bien commenté et très clair ...
Je l'utiliserai également (après test bien sûr)

Commentaire de jcq le 07/01/2005 11:12:51

J'ai mis sur un site en production ce matin un log dans l'application_start et application_end sur un serveur mutualisé.
Résultat, je confirme que l'application_end intervient si personne n'est présent sur le site au bout de 10 minutes, l'Application_Start sera déclenché quand un visiteur se connectera sur le site...

jean-claude

Commentaire de jesusonline le 07/01/2005 12:19:27 administrateur CS

zut, j'ai testé en local, et ca marchait bien, meme sans visiteur et ca durait plus de 10min.
Je regarde si je peux faire quelque chose, en essayant de supprimer le othread.abort dans le application_end ?

Cyril

Commentaire de jcq le 07/01/2005 15:12:30

A mon avis, la seule solution qui fonctionne pour exécuter des procédures à interval régulier est de créer un DTS sur une base SQL Server... (a condition d'en avoir accès ! sur mes hébergements mutualisés, j'ai pas le droit d'en créer, snif)...
Donc si y'a une autre solution merci de la donnée, ça fera des heureux.

Jean-claude

Commentaire de jfbernier le 22/01/2005 17:05:49

jesusonline>Très bonne idée. Moi aussi je vais l'utiliser. Meme si l'application est stoppée toutes les 10 mn, ce n'est pas bien grave, c'est une très bonne alternative aux lots DTS.

jean-claude>les DTS sont la meilleures solutions selon moi, mais quand tu es hébergé sur un serveur mutualisé qui accepte les DTS, il y a un inconvénient non négligeable. En effet, les lots DTS fonctionne sur un serveur et ne sont donc pas liés à une seule table. Ce qui signifie que tout le monde peut les ouvrir et les modifier, et encore plus grave, voir tes codes de connexions à ta base.

Commentaire de fred9595 le 14/02/2005 19:20:48

Concernant l'application_end, celle ci est declenchée par le TimeOut du serveur IIS (au niveau des proprietes de l'application).

Sinon, je ne pense pas, que tu puisses empecher l'arrêt du Thread, car celui fonctionne dans le meme espace que l'application.

3 modes :

* LOW
> L'appli fonctionne dans le meme process qu'IIS
*MEDIUM
> L'appli fonctionne dans le meme process que les autres applications en MEDIUM
*HIGH
> L'appli fonctionne dans un process isolé

Dans les 3 cas, il n'est pas possible d'avoir un processus supplementaire, tout juste, tu peux avoir un beau plantage du serveur.
A moins de parametrer l'application en OUT OF PROCESS
au niveau du module "Component Services", ou, je crois, tu peux le faire aussi sur webconfig

Fred,

Commentaire de camillus_9 le 24/09/2006 00:30:38

Bonjour,

je trouve le thread qui declenche le timer est tres bien fait et bien expliqué, ça marche tres bien en ajoutant  oThread.Abort()dans application end,
por contre lorsque j ai deployé cette methode dans un autre poste le fichier text ne se genere pas !! je sais pas d où peut venir ce probleme. sachant bien que ce qui concerne le service ASP.net est bien demarré lorsque on ouvre une premiere session ...

Merci à ceux qui vont repondre, et MErci encore une fois pour ce superbe code  

Commentaire de esperento57 le 08/11/2008 12:36:29

Alors délà merci pour ce code, décidement bien souvent lorsque je cherche un code et que je trouve la solution qui y a-t-il au bout: JesusOnline! Merci pour ça!
Ensuite concernant l'arret du serveur après N minute, cela peut sans doute être empeché via la sollicitation d'un pas par un site de cron http://cron.hiwit.org/, dite moi si je me trompe...

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Procédure stockée [ par Ju ] Bonjour à vous tous, voilà j'ai quelques petits pb avec l'application de Procedure stockée. Je fais ma connexion à la base de données dans le global.a Comment debugger une application asp ? [ par adebruyn ] Bonjour à tous,J'essaie depuis trop longtemps de debugger une application asp ! Je suis sous IIS 5.0 (w2k server) et visual interdev 6.0. J'ai lu et a iis: erreur 500 et Server Application Error [ par tiguy21 ] SalutJe viens d'installer IIS. Il fonctionnait avant, avec le SP2 de windows xp, mais jai remis le sp1, car javais des problemes avec le SP2. IIs fonc IIS : 2 Sites Web SSL mais une seule application ASP.NET ... [ par samfra ] Bonjour,1. Si je cr&#233;e 2 sites web dans IIS, IIS me charge 2 instances de mon application.Est-ce que quelqu'un sait faire en sorte que ce soit la .NET1.1 et 2.0 [ par JPP80FR ] sous Windows SBS 2003 et IIS 6 j'ai des application comme Sharepoint et le module "Remote Web Workplace" demande le framwork  1.1 et des base MS SQL 2 IIS, kesako ? [ par OneHacker ] Qu'est ce que IIS ? Pour afficher des pages HTML y a t il besoin de créer une application serveur ? Est ce que Windows XP Pro, suffit pour créer une a Connexion distante à IIS [ par Paulo2901 ] Bonjour à tous.J'ai un problème très sérieux.Je viens de terminer la réalisation d'une application web qui doit tourner en Intranet. Durant tout le dé ASP.NET 2.0 Avec IIS 5.1 [ par clemien ] Bonjour,je souhaite mettre une application developper avec visual studio 2005 en production sur un serveur IIS 5.1.J'ai ajouter installer le framework IIS + ASP.NEt + Session_End + deconnexion simultanée [ par notfoune ] Bonjour tous le monde, Je viens vers vous afin que vous m'aidiez à trouver mon problème concernant des déconnexions intempestives et simultanée de to


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,811 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales