djay99
Messages postés22Date d'inscriptionmardi 17 juillet 2007StatutMembreDernière intervention12 mars 2008
-
17 juil. 2007 à 17:47
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 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); }
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 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
djay99
Messages postés22Date d'inscriptionmardi 17 juillet 2007StatutMembreDernière intervention12 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 ^^
djay99
Messages postés22Date d'inscriptionmardi 17 juillet 2007StatutMembreDernière intervention12 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
Vous n’avez pas trouvé la réponse que vous recherchez ?