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 :

[C#] Comment rédémarrer une application asp.net sous 2000/XP


Sujet :

ASP.NET

  1. #1
    Expert éminent
    Avatar de neo.51
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 663
    Points : 6 418
    Points
    6 418
    Par défaut [C#] Comment rédémarrer une application asp.net sous 2000/XP
    Bonjour,

    Bon voici le problème :
    J'ai une applis asp.net qui lit un fichier xml au démarage et qui garde les infos en cache avec un singleton.
    Mais quand je modifie le fichier xml, il faudrait que je redémarre l'application asp.net afin que les modifications apportées au fichier xml soient prises en compte.

    Sous windows 2003 server il suffit de recycler le pool d'application ok.

    Mais sous 2000/XP si on redémarre IIS on redémarre que IIS et pas l'application asp.net. Le seul moyen est de killer le process ASPNET avec ALT+CTRL+SUPPR.

    Moi perso ça me gène pas plus que ça . Le problème c'est que c'est pas trés "propre", je cherche donc une solution plus propre étant donné que je suis en train de faire un tutoriel sur une applis asp.net utilisant ce fameux système de cache xml.


    une idée ?

  2. #2
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Normalement, ASPNET détecte la modification du fichier xml et mets à jour le cache tout seul.

  3. #3
    Expert éminent
    Avatar de neo.51
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 663
    Points : 6 418
    Points
    6 418
    Par défaut
    Citation Envoyé par lutecefalco
    Normalement, ASPNET détecte la modification du fichier xml et mets à jour le cache tout seul.
    Oui sur un web.config, on est d'accord, mais là c'est un cache que je me suis fais à la mimine donc je ne bénéficie pas de tous ces mécanismes.

    J'éssaye une autre voie en mettant un systemfilewatcher sur le xml. J'initialise le systemfilewatcher dans le application start du glabal.asax et je déclanche un event pour vider le cache dés qu'on écrit sur le xml...

    c'est pas gagné non plus

  4. #4
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Citation Envoyé par neo.51
    Citation Envoyé par lutecefalco
    Normalement, ASPNET détecte la modification du fichier xml et mets à jour le cache tout seul.
    Oui sur un web.config, on est d'accord, mais là c'est un cache que je me suis fais à la mimine donc je ne bénéficie pas de tous ces mécanismes.

    J'éssaye une autre voie en mettant un systemfilewatcher sur le xml. J'initialise le systemfilewatcher dans le application start du glabal.asax et je déclanche un event pour vider le cache dés qu'on écrit sur le xml...

    c'est pas gagné non plus
    Non non pas seulement sur le web config
    J'ai déjà lu un truc comme le tien justement. C'était pour ex d'un site commercial où tous les objets en vente étaient mis en cache à partir d'un fichier xml. Et qd tu modifiais ce xml, c'était mis à jour tout seul

  5. #5
    Expert éminent
    Avatar de neo.51
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 663
    Points : 6 418
    Points
    6 418
    Par défaut
    Mon code est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    public class DescEtatsFactory
    	{
    		private static descetats m_dataDescEtats;
    		public static descetats GetEtatDesc()
    		{
    			//si il n'y a pas d'instance du dataset m_dataDescEtats on en crée une
    			if(m_dataDescEtats == null)
    			{
    				m_dataDescEtats = CreateListEtatsDesc();
    			}
    			return(m_dataDescEtats);
    		}
    		//on crée une instance de dataDescEtats qu'on remplie
    		private static descetats CreateListEtatsDesc()
    		{
    			descetats dataDescEtats;
    			dataDescEtats = new descetats();
    			XmlDataDocument m_doc = new XmlDataDocument(dataDescEtats);
    			m_doc.Load(System.AppDomain.CurrentDomain.BaseDirectory + "EtatsMetier/descetats.xml");
    			return(dataDescEtats);
    		}
    descetats est un dataset fortement typé généré automatiquement à partir d'un XSD représentant le schéma de mon fichier xml et je t'assure que quand je change le fichier xml les données ne sont pas mises à jours

    Si je redémare IIS ça garde encore dans le cache. Il faut killer le process aspnet ou recycler le pool d'application sur une 2003 server.

    Je continue de regarder du coté des systemfilewatcher mais je pense que je vais devoir lancer un mini thread dédié à la surveillance de ce fichier

  6. #6
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    Bon j'ai regardé dans mon bouquin et j'ai trouvé.

    Faut créer une dépendance entre ton cache et le fichier XML.
    Voilà un bout de code en VB.NET

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Public Sub UpdateCache(strItem as string)
      Dim strPath as string
      Dim dom as New XmlDocument()
     
      strPath = Server.MapPath(strItem)
     
      dom.Load(strPath)
     
      Dim dependency as new CacheDependency(strPath)
     
      Cache.Insert(strItem, dom, dependency)
    End Sub
    T'appelles la fonction UpdateCache où tu préfères (Application_OnStart par ex) et le tour est joué normalement[/code]

  7. #7
    Expert éminent
    Avatar de neo.51
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 663
    Points : 6 418
    Points
    6 418
    Par défaut
    arf ben en cherchant tout seul je me suis fait tout à la main :

    Donc le mot de la fin :

    J'utilise un systemfilewatcher sur mon fichier xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public Global()
    		{
    			InitializeComponent();
                m_watcher = new System.IO.FileSystemWatcher(System.AppDomain.CurrentDomain.BaseDirectory + "EtatsMetier/");
               m_watcher.NotifyFilter = System.IO.NotifyFilters.LastWrite;
               m_watcher.Filter="descetats.xml";
               m_watcher.Changed+=new System.IO.FileSystemEventHandler(m_watcher_Changed);
               m_watcher.EnableRaisingEvents = true;
    		}
    et je déclenche un évent quand le fichier est modifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     private void m_watcher_Changed(object sender, System.IO.FileSystemEventArgs e)
            {
                EtatsMetier.DescEtatsFactory.KillInstance();
            }
    lutecefalco : ta méthode est plus simple mais me parait un peu plus "obscure" que la mienne, je me méfie parfois des mécanismes qui entre en jeux quand le framework gère tout tout seul. Je vais garder ton bout de code de coté, je regarderais les différences de perf comparé à mon système singleton + filewatcher

  8. #8
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    singleton ?? c'est quoi

  9. #9
    Expert éminent
    Avatar de neo.51
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 663
    Points : 6 418
    Points
    6 418
    Par défaut
    http://www.microsoft.com/france/msdn/architects/info/info.asp?mar=/france/msdn/architects/info/20032811-des-singleton.html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public class singleton 
       { 
          private static object m_instance; 
          public static object GetInstance() 
          { 
            if(m_instance== null) 
             { 
                m_instance= CreateInstance(); 
             } 
             return(m_instance); 
          } 
         private static object CreateInstance() 
          { 
             return(new object); 
          }
    c'est un singleton simple. L'interet est d'avoir une seule instance d'un objet accéssible par d'autres classes

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

Discussions similaires

  1. [SP-2013] Comment sortir une application ASP.NET de SharePoint
    Par jérémyp8 dans le forum SharePoint
    Réponses: 17
    Dernier message: 09/01/2015, 17h06
  2. Déployer une application asp.net sous sharepoint
    Par assouma903 dans le forum SharePoint
    Réponses: 1
    Dernier message: 18/03/2009, 14h36
  3. comment crée le fichier setup d'une application vb.net
    Par gabay dans le forum Windows Forms
    Réponses: 2
    Dernier message: 12/06/2008, 00h53
  4. Comment déployer une application ASP.NET avec Visual Studio .NET
    Par Marie-Hélène dans le forum Visual Studio
    Réponses: 0
    Dernier message: 01/12/2004, 13h00

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