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):
ChannelFactory factory = new ChannelFactory("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 :
factory.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...).
Merci d'avance à tous!!!!