Salut à tous,
J'ai une nouvelle question sur le streaming, en effet j'ai codé un téléchargement de fichier Service -> Client. Le client récupère un flux qu'il vient relire mais je ne comprends pas le fonctionnement exacte qui est mis en place (plus ou moins à mon insu). Je m'explique: côté client je récupère un objet qui contient 2 Headers et un Body (le flux qui n'est autre que le fichier en lui-même). Voici le code (côté client):
Ma question vient du fait que, si je remplace les * par
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 ChannelFactory<IImpressionEdition> factory = new ChannelFactory<IImpressionEdition>("epImpressionEdition"); impressionEdition = factory.CreateChannel(); SelectionsUtilisateur selectionsUtilisateur = new SelectionsUtilisateur(listCat, listDonnee); mfile = impressionEdition.DonneFichierRapport(selectionsUtilisateur); sourceStream = mfile.DataFile; ************* //Spécification du répertoire où l'on souhaite placer le fichier string uploadFolder = String.Format("{0}{1}\\{2}", AppDomain.CurrentDomain.BaseDirectory , ConfigurationSettings.AppSettings["UploadDirectory"] , mfile.FileName); //destinationStream va récupérer le sourceStream qui correspond au corps du MessageFile renvoyé //par le service, cette récupération se fait par morceau, la taille de chaque partie étant spécifiée //par la constante bufferLen using (destinationStream = new FileStream(uploadFolder, FileMode.Create, FileAccess.Write, FileShare.None)) { const int bufferLen = 8192; byte[] buffer = new byte[bufferLen]; int count = 0; while ((count = sourceStream.Read(buffer, 0, bufferLen)) > 0) { destinationStream.Write(buffer, 0, count); } sourceStream.Close(); }j'arrive toujours à récupérer mon fichier par contre, si je mets un point d'arrêt à ce niveaux et que je ferme l'hébergeur de mon service, seules quelques boucles de relecture sont effectuées avant de remonter une erreur du type "canal de communication fermé". J'en déduis donc, à vous de me confirmer ou d'infirmer, que la mécanique interne du fonctionnement du streaming crée un canal (en gros un createChannel()) sans que je ne puisse rien y faire. Ma question est donc double, ai-je bien compris? et Comment cela fonctionne-t-il dans le détail? (appels successifs ou non, session, etc...).
Code : Sélectionner tout - Visualiser dans une fenêtre à part factory.close();
Merci d'avance à tous!!!!
Partager