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):
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();
            }
Ma question vient du fait que, si je remplace les * par 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...).
Merci d'avance à tous!!!!