[ASP.NET][C#]Perte des variables session en utilisant Directory.Move(...)

EvilDef Messages postés 66 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 19 mai 2006 - 19 avril 2005 à 15:49
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 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);
}

Merci d'avance !!

Vive le COBOL

24 réponses

jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
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 ?)


<hr>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
0
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
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).

Esta claro ?

yopyop
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
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 ...



faudra que je teste :)

<hr>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
0
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
EvilDef Messages postés 66 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 19 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.

Vive le COBOL
0
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
20 avril 2005 à 13:57
re,

pourrais-tu donner la structure de ton application (folders) et le path du folder que tu déplaces ?

yopyop
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
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.






<hr>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
0
EvilDef Messages postés 66 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 19 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

Vive le COBOL
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
20 avril 2005 à 15:12
t'as quoi dedans ? des pages aspx ? ou juste des images & co ?

<hr>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
0
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
20 avril 2005 à 15:14
bon,

je me suis mal exprimé..encore une fois :)

C'est pas vraiment la dll qui est recompilée...mais la page...

/library/en-us/dnaspnet/html/asp12282000.asp http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspnet/html/asp12282000.asp

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.

autres liens:
=kb;en-us;324772 http://support.microsoft.com/default.aspx?scid=kb;en-us;324772

http://support.microsoft.com/default.aspx?scid=kb;en-us;316148
et en cherchant sur le web tu trouves pleins de post dont le contenu est:

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.

Je vais faire quelques test pour voir ca...

yopyop
0
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
20 avril 2005 à 15:16
merci pour la structure des folders...

une question stupide:
si je mets juste la dll sur le server, l'application asp.net fonctionne ?

yopyop
0
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
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....

yopyop
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
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 :)


<hr>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
0
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
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")



Else



Me.TextBox1.Text = "Session exists :" & Session("test")



End
If



End
Sub



Private
Sub Button1_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs)
Handles Button1.Click
'pas besoin de code ici

End
Sub

Ajouter un folder à cette application "toto"

Lancer l'application.

au démarrage on voit que la session est créée
faire 2-3 clicks, on voit que la session existe

renommer le répertoire toto en toto2 (ou autre) SANS fermer le browser (sans arrêter l'application).

retourner sur la page et faire un click->la session est recréée...

oen tous cas, c'est le fonctionnement que j'ai.
yopyop
0
EvilDef Messages postés 66 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 19 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

Vive le COBOL
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
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.



Merci :)

<hr>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
0
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
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.

yopyop
0
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
20 avril 2005 à 23:29
ouais en fait c'est plus compliqué que cela....

mais dans ton cas, j'ai fait une mini application pour reproduire le truc et j'obtiens:

en ayant la structure suivante:
\bin
\workdir
\in
\out
\tmp

Directory.move, si c'est un "vrai" move
\workdir\in déplacé dans \workdir\tmp\in -> la session est préservée

\workdir\out "déplacé" dans \workdir\out2 (donc renommé) ->la session est perdue.

que le folder soit vide ou non.

Tout cela fait via l'application....

Donc déplacer c'est ok, renommer tu perds ta session (j'ai pas testé avec les fichiers mais uniquement avec les folders).

yopyop
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
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 :)

<hr>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
0
EvilDef Messages postés 66 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 19 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

Vive le COBOL
0
Rejoignez-nous