Acces a un fichier en meme temps

djay99 Messages postés 22 Date d'inscription mardi 17 juillet 2007 Statut Membre Dernière intervention 12 mars 2008 - 17 juil. 2007 à 17:47
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 19 juil. 2007 à 07:45
Bonjour tout le monde,

Je suis actuelement confronte a un probleme de concomittance d'acces a un fichier avec mon programme C#.

Je developpe un test pour uploader et recuperer un fichier via un web service. En fait les fonctions upload et get existe deja et je dois juste effectuer un appel a ces deux methodes.
Lorsque j'execute mon test une fois, il n'y a aucun souci. Le probleme survient lorsque j'insere mon test unitaire dans un load test. En effet je simule l'appel a ces deux fonctions par beaucoup d'utilisateurs en meme temps sur le web service. Et la j'ai un message d'erreur m'indiquant que mon fichier de test (pour l'upload et le get) est deja utilise par un autre processus.

Voici un bout de mon code ou j'ai essaye de delete le repertoire ou se situe le fichier a chaque fin d'appel  et ou j'ai essaye d'inserer un Thread.sleep mais aucune de ces deux methodes ne m'apporte satisfaction.

[

TestMethod()]

public
void MediaMa_steppedUserStaticData_Test(){

MediaServiceAgent agent = 
new
MediaServiceAgent(_mediaHost, _proxyTimeout);

string resultUpload = agent.UploadFile(_fileData, _filePath, _fileName, _overwrite, _matrixId);

byte[] resultGet = agent.GetFile(_filePath, _fileName, _matrixId);

CollectionAssert.AreEqual(resultGet, _fileData, 
"Error in the file returned");

//Thread.Sleep(1000);

//Directory.Delete(_pathDirectoryToDelete,true); }



Merci d'avance d'eclairer ma lanterne

7 réponses

Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
17 juil. 2007 à 17:55
Et en rajoutant un 'agent.Dispose()' à la fin de ta méthode ?

<hr size="2" width="100%" />Working as designed
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
17 juil. 2007 à 18:55
Salut,

L'erreur est bien levée côté client, pas côté service ?
Le test de charge s'executant logiquement sur plusieurs threads, tu ne pourras pas supprimer le répertoire contenant le fichier dans l'un d'entre eux.
Sauf si tu executes l'action pile au "bon" moment (c'est à dire un moment où aucun thread n'a ouvert le fichier), mais dans ce cas les tests devant encore s'executer vont tous échouer.
Ensuite si le problème est juste de permettre la lecture simultanée du même fichier, tu devrais vérifier le mode de partage utilisé par le code effectuant la lecture du fichier : System.IO.FileShare

/*
coq
MVP Visual C#
CoqBlog
*/
0
djay99 Messages postés 22 Date d'inscription mardi 17 juillet 2007 Statut Membre Dernière intervention 12 mars 2008
17 juil. 2007 à 19:56
Merco Nikoui et Coq de vous pencher sur mon probleme.

Bien que j'ai etudie ta solution Nikoui, je pense que celle de Coq est vraiment adapte a mon probleme car effectivement j'ai juste besoin d'autoriser l'acces a mon fichier par plusieurs threads en meme temps. Donc je pense que le FileShare.Read correspond tout a fait.

Voici le bout du code ou on cree le fileStream et ou j ai rajouter le fileShare et le fileAcces:

using (
MemoryStream ms =
new
MemoryStream(file)){

using (
FileStream fs =
new
FileStream(fullfilePathName,
FileMode.Create,
FileAccess.Read,
FileShare.ReadWrite)){

ms.WriteTo(fs);}

}

C'est le seul endroit ou l'on cree un FileStream.
Apres avoir rajoute ces deux parametres, ca ne fonctionne toujours pas, j'ai toujours le meme message d'erreur.

PS: desole pour le manque d'accent mais clavier qwerty oblige :/
Et aussi si vous pouviez me precisez comment mettre du code dans mon topic plus proprement, merci ^^
0
djay99 Messages postés 22 Date d'inscription mardi 17 juillet 2007 Statut Membre Dernière intervention 12 mars 2008
18 juil. 2007 à 15:07
Bon je suis desole c'est de ma faute, le probleme venait de l'appel a la donction d'upload. Tous les utilisateurs uploader le meme fichier au meme endroit, J' ai recommence en faisant creer un nouveau fichier a chaque test et la ca passe beaucoup mieux.
En tout cas merci de s'etre penche sur mon probleme et cela m'a tout de meme donne des bonnes pistes que je ne connaissais pas. Rien n'est jamais perdu.

Merci beaucoup.

PS: si vous pouviez me dire tout de meme comment mettre du code plus propre dans le forum ^^ merci
0

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

Posez votre question
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
18 juil. 2007 à 18:53
C'est pour ça que j'avais demander "L'erreur est bien levée côté client, pas côté service ?" ;-)

Pour le code, le seul moyen que je connaisse d'y parvenir à coup sur est de passer en texte simple avant de coller le code dans le forum. On perd la coloration syntaxique mais au moins c'est lisible (et collable dans un éditeur).
Donc basiquement Notepad est ton ami (ou l'item "Text" de mon petit outil :p : http://www.csharpfr.com/codes/COQTEXTTOOLS-TRANSFORMATIONS-TEXTE-SIMPLE-UTILISATION-ANTIXSSLIBRARY_42522.aspx)

/*
coq
MVP Visual C#
CoqBlog
*/
0
djay99 Messages postés 22 Date d'inscription mardi 17 juillet 2007 Statut Membre Dernière intervention 12 mars 2008
18 juil. 2007 à 21:21
Merci beaucoup egalement pour cet utilitaire qui a coup sur sera d'une grande utilite ^^
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
19 juil. 2007 à 07:45
Moi je copie-colle depuis VS et ensuite je remets un peu en forme.
C'est un peu chiant, mais au moins y'a la coloration...

<hr />
-Blog-
0
Rejoignez-nous