IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Communication Foundation .NET Discussion :

Fonctionnement interne du streaming


Sujet :

Windows Communication Foundation .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 143
    Par défaut Fonctionnement interne du streaming
    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!!!!

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 143
    Par défaut
    J'ai eu une réponse, après un sacré paquet de poste sur différents forums, mais ne dit-on pas que la fin justifie les moyens!!!!!!!
    Donc voilà:
    En fait au moment ou je viens lire les fichiers un descripteur est ouvert côté service et un autre côté client, de ce fait la factory n'entre plus du tout en compte.
    Ensuite cela fonctionne de cette manière:
    Le runtime met a disposition une partie du fichier dans un tampon, ma boucle de relecture vient consommer ce tampon et, ce qui est totalement transparent, à chaque fois que le tampon est totalement consommé, le runtime va lire la suite du fichier pour la mettre dans le tampon et ce jusqu'à ce que le fichier est été totalement récupéré.
    Voilà, un grand merci à Frédéric Mazue de Programmez pour son aide, je suis à votre dispo si vous avez des questions parce qu'après toutes les recherches menées, je commence à connaître le sujet.....
    Bon développement à tous!!!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 23/08/2006, 21h51
  2. Fonctionnement interne
    Par menzlitsh dans le forum Windows XP
    Réponses: 7
    Dernier message: 30/03/2006, 23h32
  3. Fonctionnement interne des outils de gestions de paquets
    Par Spoutnik dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 14/03/2006, 13h52
  4. Fonctionnement interne de l’OpengGL
    Par Ekinoks dans le forum OpenGL
    Réponses: 10
    Dernier message: 06/12/2005, 14h44
  5. Question sur le fonctionnement interne au moteur PHP
    Par Leviathan_72 dans le forum Langage
    Réponses: 3
    Dernier message: 25/11/2005, 01h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo