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# VS2010] Répertoires système ou non pour reconstruction du bin.


Sujet :

ASP.NET

  1. #1
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut [C# VS2010] Répertoires système ou non pour reconstruction du bin.
    Bonjour à tous,

    J'ai une appli Web dans lequel il y a un WebService (WS).
    Ce WS permet de mettre à jour des fichiers (XML, ...) de l'application.
    Le principe est qu'il supprime des répertoires/fichiers qu'il reconstitue.

    Le problème est que cette opération fait recompiler le Bin de l'appli Web et me fait perdre mes variables de session.
    Si bien que lorsque l'on navigue tranquillement sur le site, si quelqu'un fait appel au WS, l'utilisateur doit se reconnecter...

    Comment faire pour définir les répertoire (lors de leur modification) qui justifieront une recompilation de l'application ou non.

    Merci d'avance.

    David.

  2. #2
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    Bonjour,

    Avec IIS si tu modifie le fichier Global.asax ou le fichier web.config d'une application, alors il y a redémarrage de l'apppool associé et donc perte des sessions. Ce qui est normal.

    Après, je ne comprends pas trop le principe du Web Service. Il va mettre à jour ton fichier web.config ? Ça ne me semble pas une bonne idée, vu les redémarrages forcés, ni d'un point de vue sécurité.

    Je te propose plutôt ceci :

    • Travailler avec un fichier XML autre que le web.config
    • Ou bien, stocker tes paramétrages dans une DB

    En espérant t'avoir aidé.

  3. #3
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    Bonjour Nicolas,

    Non, je ne touche pas au web.config.
    En gros, le WS fait des update dans la BDD et construit des Zip à la racine de l'application serveur.
    Ensuite, il supprime un répertoire à la racine de l'appli (contenant des XML propres à l'appli, des images et autres médias) et dézippe le fichier, ce qui reconstruit le répertoire supprimé précédemment.

    Donc, rien qui ne renécessite un redémarrage de l'appli... Sauf qu'il le fait quand même.

    Je pense qu'il y a plusieurs événements assujettis au redémarrage de l'appli.
    Ils doivent bien être plus ou moins paramétrables...J'espère.

  4. #4
    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 : 39
    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
    L'astuce serait de faire ca dans un repertoire qui n'est pas dans la hierarchie de ton site et de l'ajouter sous IIS comme répertoire virtuel. De cette manière ca ne redémarrerait pas le site mais juste le repertoire virtuel.

  5. #5
    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 : 39
    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
    Ah sinon, c'est un Site Web ou Application Web comme template de Visual Studio? Une Application Web contrairement au Site ne devrait pas poser le problème vu que c'est déjà compilé.

  6. #6
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    Bonjour Nathanael,

    C'est un site Web, de mémoire (comment fait-on pour s'en assurer ?).
    N'y a t-il pas moyen de transformer un site Web en appli Web ?

    Ca m'ennuie de faire ce micMac de répertoire virtuel, c'est une appli que je vais devoir monter sur beaucoup de machines et il y a beaucoup d'échanges et de modification structurelle de ce répertoire.
    De plus, il n'y en a pas qu'un.

  7. #7
    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 : 39
    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
    Y'a qu'a lire le tutoriel du monsieur la haut
    http://nicolasesprit.developpez.com/...tudio-2010/#L2

  8. #8
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    En effet, très bon cet article... Mais il ne m'apporte pas de bonnes nouvelles.
    En effet, je suis en Site Web et je veux y rester.
    En fait, j'ai le site sur un serveur, et il y est aussi sur de nombreuses tablettes.
    J'ai un bouton de "MAJ de l'appli" sur les tablettes qui rapatrie les fichiers .CS et .ASPX du serveur pour écraser ceux de la tablette.
    Ceci ne sera plus possible avec une appli Web.

    J'ai été un peu plus loin dans le pb.
    En fait, ce n'est pas l'écrasement des fichiers qui fait reconstruire le BIN, mais juste la suppression d'un répertoire.
    1 - Je rapatrie un ZIP que je décompresse. OK
    2 - J'écrase les fichiers du site par ceux décompressés. OK
    3 - Je supprime le répertoire contenant les fichiers décompressés. REDEMARRAGE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        public bool DeleteDirectory(string target_dir) { // Supprime un répertoire, même non vide
            bool result = false;
            string[] files = Directory.GetFiles(target_dir);
            string[] dirs = Directory.GetDirectories(target_dir);
            foreach (string file in files) {
                File.SetAttributes(file, FileAttributes.Normal);
                File.Delete(file);
            }
            foreach (string dir in dirs) {
                DeleteDirectory(dir);
            }
            Directory.Delete(target_dir, false);
            return result;
        }
    C'est cette fonction que j'utilise. En fait, je peux supprimer le contenu du répertoire sans problèmes, mais si je supprime le répertoire lui même (MonRepDecompresse, qui est situé "RacineSite/Transferts/MonRepDecompresse"), c'est là qu'il y a le redémarrage (que je le supprime par le code ou manuellement, c'est pareil).
    En gros, si je commente le dernier "Directory.Delete()", il n'y a pas de redémarrage.
    J'ai essayé de changer les droits ("Tout le monde" en "Accès total") et même le propriétaire, ça ne change rien.

    C'est un répertoire créé par le code, c'est quand même incroyable.

    Avez vous une piste ?

  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 : 39
    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
    Cela dit, c'est assez étrange comme architecture que de déployer un serveur partout. Pourquoi ne pas tout centraliser?

  10. #10
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    Les tablettes ne sont pas perpétuellement connectées.
    Au départ, l'utilisateur se connecte pour "Télécharger les données" dont il a besoin.
    Après, il va sur site (ou il n'a plus accès au réseau), il renseigne des données dans l'appli.
    Pour finir, il revient sur sa base pour faire une synchronisation (il envoie les données qu'il a saisi et il télécharge du nouveau boulot).
    ... Ainsi de suite.

    Beaucoup d'échange de fichiers, donc. Car il y a des données dans la base et des données sous forme de fichiers (XML, médias, ...).

    J'ai essayé de changer quelques propriétés du fichiers "Transferts" à travers la console IIS ("Indexer cette ressource", "Accès au Journal"), mais ça ne change rien.

  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 : 39
    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
    Pour le coup c'est ASP.Net qui n'était pas forcément le meilleur choix de techno. :\

  12. #12
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    Si, car il y a d'autres aspects de l'application qui ne pouvaient être que Web...

    Mais donc, à votre connaissance, il n'y a aucun moyen de créer et supprimer un répertoire sans que ça déclenche une recompilation de la DLL ?

    Une inconnue intéressante à connaitre:
    - Sur quel événement se déclenche la recompilation d'un site Web ?
    (c'est à chaque requête vers le serveur ? Il y a un Timer qui vérifie régulièrement si les fichiers "sensibles" ont changés ?, ...)

  13. #13
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    Comme l'a dit Nathanael, la synchronisation des fichiers ne devrait pas se faire avec ASP.NET, mais plutôt Microsoft Sync par exemple.

    Toujours est-il qu'IIS recompile ton site que si tu touches au répertoire App_Code ou Bin. Si tu rajoutes un fichier image ou un fichier CSS il n'y a pas de problème.

    Après, il est toujours possible d'optimiser cette compilation, cf ce billet.

    Afin de mieux cerner le contexte, peux-tu décrire simplement quelle est la hierarchie des folders (et quel est la racine du site web dans IIS), et à quel endroit tu copies ou supprime un folder ?

  14. #14
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    Mon appli est ici:
    C:\Inetpub\wwwroot\MonAppli\MonAppli

    Mon répertoire virtuel est le 2ème "MonAppli"

    Et il y a ça dedans:
    --- [REPERTOIRES] ---
    App_Code
    App_Data
    Bin
    FicsUtils
    Images
    PageMembers
    Ressources
    Tracabilite
    Transferts (Répertoire problématique)
    xsd
    --- [FICHIERS] ---
    aide.htm
    Default.aspx
    Default.aspx.cs
    favicon.ico
    SNCF.master
    SNCF.master.cs
    Transferts.asmx (Web service)
    Web.config

    Je suis en train de me pencher sur cette piste, mais c'est un peu nébuleux encore:
    http://msdn.microsoft.com/en-us/libr...onsection.aspx

Discussions similaires

  1. [MySQL] Système de votes (pour les membres) : cmt le créer ?
    Par yazerty dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 20/02/2006, 12h58
  2. Répertoire de session défirent pour chaque site web.
    Par The Tiger Man dans le forum Apache
    Réponses: 2
    Dernier message: 19/01/2006, 16h48
  3. [Système] Langage c pour une apli web ?
    Par cedre22 dans le forum Langage
    Réponses: 9
    Dernier message: 14/12/2005, 15h05
  4. Réponses: 5
    Dernier message: 29/11/2005, 17h35

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