[ASP.NET][C#]Perte des variables session en utilisant Directory.Move(...)
EvilDef
Messages postés66Date d'inscriptionvendredi 13 février 2004StatutMembreDernière intervention19 mai 2006
-
19 avril 2005 à 15:49
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 2010
-
27 mars 2006 à 16:59
Voila mon probleme, quand j'utilise Directory.Move(Path1,Path2), si le Path1 n'est pas vide alors je perd mes variable session.
Pourtant le deplacement est bien effectuer
Je sais qu'il n'y a rien a voir entre les variables session est un objet Directory
voila mon code ou ca marche pas quand je vire le commentaire :
if (!Directory.Exists(Directory.GetCurrentDirectory()+newpath))
{
// Directory.Move(Directory.GetCurrentDirectory()+path, Directory.GetCurrentDirectory()+newpath);
Response.Write("Le dossier a bien été renommer");
string execut = "<script>window.close(); window.opener.location.href("affiche.aspx");<" + "/" + "script>";
this.Page.RegisterStartupScript("succes", execut);
}
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 19 avril 2005 à 16:55
Je suis pas sur d'avoir tout à fait compris, je peux malheureusement pas tester (car j'utilises plus asp.net 1 mais .net 2 )
La je comprend pas vraiment le rapport mais bon : une solution peut
etre de tester si le dossier est vide ou non, s'il est vide, tu créer
un fichier à la con, tu transfere ensuite tes fichiers et tu delete ton
fichier à la con
Je viens de penser à un truc, c'est peut etre du à la mémoire ta
machine, si t'as plus de mémoie peut etre qu'il jarte tes variables,
regarde sur un post recent il a eu le problème avec des variables
caches ... donc vide ta ram et reessaye, deplace aussi un petit dossier
(quelle taille d'ailleur ?)
cs_Yopyop
Messages postés586Date d'inscriptionlundi 7 janvier 2002StatutMembreDernière intervention10 février 20101 20 avril 2005 à 11:10
Salut,
Si le folder que tu move fait partie de ton application, c'est "normal"...
C'est comme si tu modifiais le code de l'application -> la dll est "recompilée" (un truc du genre) -> tu perds les variables sessions.
La solution c'est d'utiliser un folder qui ne fait pas partie de ton application (et qui ne fait partie d'aucune autre application d'ailleurs sinon tu reportes le problème dans une autre application).
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 20 avril 2005 à 11:19
Es tu sur de toi quand tu dis que l'application reboot, quand on
deplace un dossier ? faudrais que je teste, mais si on deplace des
fichiers qui n'ont aucun rapport (un dossier d'images par exemple) je
ne vois pas pourquoi l'application redemarrerais ...
cs_Yopyop
Messages postés586Date d'inscriptionlundi 7 janvier 2002StatutMembreDernière intervention10 février 20101 20 avril 2005 à 13:04
Pour être plus précis (sans l'être vraiment), dans certains cas une dll est recrée
et dans d'autres l'application et relancée.
Donc perte des variables sessions..
yopyop
Vous n’avez pas trouvé la réponse que vous recherchez ?
EvilDef
Messages postés66Date d'inscriptionvendredi 13 février 2004StatutMembreDernière intervention19 mai 2006 20 avril 2005 à 13:35
Le repertoire a deplace est dans le meme ftp bien sur, mais il n'a rien a voir avec l'application. Enfin je continu a faire quelque test pour etre + precis.
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 20 avril 2005 à 14:07
Pour être plus précis (sans l'être vraiment), dans certains cas une dll est recrée
t'as de la doc la dessus ? tu parles de quelle DLL ? celle dans le bin ou celle dans le dossier temp ?
une dll est recréer pour quel cas ? car la je vois pas pourquoi ca
recompilerais, et puis recompiler à partir de quoi ? normalement en
production on a plus les fichier aspx.vb ? donc recompiler je comprend
pas.
EvilDef
Messages postés66Date d'inscriptionvendredi 13 février 2004StatutMembreDernière intervention19 mai 2006 20 avril 2005 à 15:08
sur mon serveur j'ai :
/bin
/FCKeditor
/ListEdit
/Home
et l'application ListEdit ne fait que geré le contenu du folder /Home("espace reserve au utilisateur") donc les repertoire modifier sont dans /Home et ne touche ni au folder /bin, ni a /ListEdit
Note that by default, each ASP.NET application is allowed a maximum
of 15 page recompiles before the whole application is restarted,
with a subsequent loss of session and application data.
When the latest compilation exceeds the threshold set in the numRecompilesBeforeAppRestart attribute of the <httpRuntime> section,
the AppDomain is unloaded and the application is restarted.
Just one more thing, do remember not to put
this type of file in bin folder (access.mdb). In ASP.NET, the server
will monitor bin folder. If any of the files in this folder is changed,
asp.net will thinkof the application is changed and the web application
will be reloaded. So this folder should only contains .dll files.
cs_Yopyop
Messages postés586Date d'inscriptionlundi 7 janvier 2002StatutMembreDernière intervention10 février 20101 20 avril 2005 à 15:25
oups...j'ai pas fini mon post...
moi il me semble que non, la dll ne suffit pas pour faire fonctionner l'application web.
il faut tout les fichiers ressources... donc tout ceux qui se trouvent dans le répertoire de l'application.
/bin
/FCKeditor
/ListEdit
/Home
Tous ces répertoires sont des ressources de l'application web.
Le système de monitoring check s'il y a eu des changements, si oui, il considère que l'application a changée.
Comme tu fais un move dans home et que home est dans les folders ressources-> "recompilation" ou plutôt restart de l'application.
Il faut mettre ton folder complètement en dehors du répertoire de ton application et normalement tu n'auras plus de problème (il faut donner les droits nécessaires sur ce folder bien sûr).
En plus c'est bien plus cohérant de faire comme ca....
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 20 avril 2005 à 16:52
Just one more thing, do remember not to put
this type of file in bin folder (access.mdb). In ASP.NET, the server
will monitor bin folder. If any of the files in this folder is changed,
asp.net will thinkof the application is changed and the web application
will be reloaded. So this folder should only contains .dll files.
Ca je sais, mais ca s'applique juste au dossier bin.
Et je ne pense pas que les problèmes viennent de la. Dans
www.ngallery.org, les images sont stockés dans un sous dossier de
l'application, et il me semble pas qu'il y a de pertes de sessions lors
de l'ajout de photos, idem pour dotnetnuke, il y a plein de choses qui
fonctionnent dans les sous repertoires de l'application.
Mais le mieux est de faire des tests si tu as le temps :)
cs_Yopyop
Messages postés586Date d'inscriptionlundi 7 janvier 2002StatutMembreDernière intervention10 février 20101 20 avril 2005 à 18:05
re,
du moment que le répertoire est un sous répertoire de l'application (ou sous répertoire), s'il y a un changement de ce répertoire -> l'application redémarre....
pour tester c'est très simple:
créer une nouvelle application
mettre
une textbox (multilignes)
un bouton (pour le reload)
le code
Private
Sub Page_Load(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles
MyBase.Load
'Put user code to initialize the page here
If IsNothing(Session("test"))
Then
Session("test") = "insession"
Me.TextBox1.Text = "Session created :" & Session("test")
EvilDef
Messages postés66Date d'inscriptionvendredi 13 février 2004StatutMembreDernière intervention19 mai 2006 20 avril 2005 à 19:46
Mais je ne suis pas sur que le probleme puisse venir de la, le probleme apparais que si le dossier a renommer est plein, mais quand je supprime un fichier, renomme un fichier, supprime un repertoire ... (toujours en passant par l'application) je n'ai pas ce probleme
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 20 avril 2005 à 20:00
Merci d'avoir testé YopYop :)
Mais je pensais pas à ca, je pensais au deplacement de fichier. Si t'as
(ou moi) un peu de temps pour tester, je ferais deux dosssier toto1 et
toto2 et je deplacerais un fichier de l'un à l'autre, pour voir ce
qu'il se passe.
En tout cas je savais pas qu'en renommant un dossier ca supprimer la session.
cs_Yopyop
Messages postés586Date d'inscriptionlundi 7 janvier 2002StatutMembreDernière intervention10 février 20101 20 avril 2005 à 22:23
re,
d'après ce que j'ai pu constater cela dépend de la date de "l'objet" (fichier, folder) que l'on modifie. Si la date (heure) change -> application redémarrée.
Il faudrait voir ce qui change à ce niveau lorsque l'on fait un move.
Mais comme je l'ai dit plus haut, il vaut mieux utiliser un répertoire hors application de toutes façons.
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 20 avril 2005 à 23:48
Merci de tout ses tests :)
Reste à savoir si on peut créer un dossier, et si oui, il suffira de
créer un dossier avec ton nouveau nom, de transferer tes fichiers de
supprimer ton dossier et session ne devra pas être perdu.
Mais bien sur la meilleure solution est de pas mettre ton dossier ici :)
EvilDef
Messages postés66Date d'inscriptionvendredi 13 février 2004StatutMembreDernière intervention19 mai 2006 21 avril 2005 à 08:21
OK merci beaucoup a tous les 2, mais c'est bizarre ce truc, je vais quand même voir si j'ai le temps pour reprendre la fonction et de cree un dossier, deplacé le contenu et supprmier le fichier vide