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

VB.NET Discussion :

Sérialisation et réseau


Sujet :

VB.NET

  1. #1
    Invité
    Invité(e)
    Par défaut Sérialisation et réseau
    Bonjour,

    Voila j'essaye de transmettre des objets par réseau en me servant des fonctions soap de serialisation.

    je sérialise un objet dans un memory stream

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim message As New Message_Réseau       'classe que jai implémenter 
    Dim m As New IO.MemoryStream
    Dim formateur As New Runtime.Serialization.Formatters.Soap.SoapFormatter
     
    formateur.Serialize(m, message)
    puis je l'envoie par réseau ainsi avec les TcpClient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .GetSteam.Write(m.ToArray, 0, m.Length)
    ensuite je le désérialise de lautre cote du reseau apres avoir recuperer mon tableau de byte() 'tab' avec read

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim message As Message_Réseau
    Dim m As New IO.MemoryStream
    m.Write(tab, 0, tab.Length)
     
    Dim formateur As New Runtime.Serialization.Formatters.Soap.SoapFormatter
    message = CType(formateur.Deserialize(m), Message_Réseau)
    Et j'ai l'erreur "Elément racine manquant" et je ne vois pas pourquoi ?

    Merci de votre aide
    Dernière modification par Poulain ; 02/02/2008 à 19h21. Motif: [ajout de la balise code]

  2. #2
    Invité
    Invité(e)
    Par défaut Test avec les BinaryFormatter
    J'ai essayé la meme chose avec un binary formatters et cette fois une erreur survient me disant que la fin du flux est atteinte avant la fin de l'analyse.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    En gros si je comprends tu fais du remoting à la main... Regarde plutôt du côté de System.Runtime.Remoting pour transmettre des objets sérialisés sur le réseau.
    Sinon, tu n'aurais pas un problème avec le transfert des données ? as-tu vérifié que tu reçois bien la même chose que tu as envoyé ?
    Pour le problème de SOAP, à quoi ressemble le XML généré ? tu as bien un élément racine ?

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    +1 pour le remoting
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par sperot51 Voir le message
    +1 pour le remoting
    Cela dit, j'ai voulu voir comment ça marchait il y a quelques jours, et c'est bien galère... notamment si tu veux que le serveur publie des évènements, le callback est un vrai cauchemar !
    Par contre j'ai un peu mis mon nez dans WCF, et c'est nettement plus simple !

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    j'ai cru voir à une époque que WCF était plus que lent ...

    et pour faire des évènements en remoting, il doit aussi etre possible d'appeler une classe locale qui s'occupera de faire l'évènement

    enfin je connais pas trop le remoting, j'ai juste vu le fonctionnement en singleton et à priori ca prend 3 lignes de codes pour synchroniser une instance entre 2 applis
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    j'ai cru voir à une époque que WCF était plus que lent ...
    A vrai dire j'ai pas assez utilisé pour comparer... mais ça me surprend un peu quand même. Tu as vu ça où ?

    et pour faire des évènements en remoting, il doit aussi etre possible d'appeler une classe locale qui s'occupera de faire l'évènement
    Oui c'est ça, sauf qu'il faut aussi ouvrir un channel en écoute côté client, et là ça se complique... en tous cas j'ai pas trouvé comment faire.

    enfin je connais pas trop le remoting, j'ai juste vu le fonctionnement en singleton et à priori ca prend 3 lignes de codes pour synchroniser une instance entre 2 applis
    Oui, pour une appli très basique c'est effectivement assez simple...

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    à l'époque de la beta 2 je regardais ce que vs 2008 apportait
    et je suis tombé sur un test de WCF ...


    EDIT :
    à manger pour google :
    wcf performance
    wcf vs remoting


    enfin ca dit que c'est plus lent mais mieux (surement plus pratique)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Invité
    Invité(e)
    Par défaut C'est bon
    Merci pour vos réponses J'ai finalement réussi j'avais juste oublié de me repositionné dans mon MemoryStream ! Voici mon code pour les intéressés :

    Serialisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim m As New IO.MemoryStream
    Dim formateur As New Runtime.Serialization.Formatters.Binary.BinaryFormatter
    m.Seek(0, 0)
    formateur.Serialize(m, objet_a_serialiser)
    var_TcpClient.GetStream.Write(m.ToArray, 0, m.Length)
    m.Close()
    Désérialisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim m As New IO.MemoryStream
    Dim tab() As Byte
    var_TcpClient.GetStream.Read(tab,0,var_TcpClient.ReceiveBufferSize)
    m.Seek(0, 0)
    m.Write(tab, 0, tab.Length)
    Dim formateur As New Runtime.Serialization.Formatters.Binary.BinaryFormatter
    m.Seek(0, 0)
    message = CType(formateur.Deserialize(m), Module_Réseau.Message_Réseau)
    m.Close()
    Merci !

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

Discussions similaires

  1. [Jeu] - Programmation réseau <sérialisation,sockets,threads>
    Par ixabro dans le forum Développement
    Réponses: 5
    Dernier message: 02/02/2012, 22h18
  2. Sérialisation d'objet et envoi par le réseau
    Par MagicTux dans le forum Langage
    Réponses: 7
    Dernier message: 03/04/2011, 18h18
  3. Comment subsituer un chemin par un autre dans un réseau ?
    Par Baillard dans le forum Développement
    Réponses: 3
    Dernier message: 11/08/2002, 14h01
  4. Redimensionnement des Paquets IP sur un Réseau Local
    Par Bonoboo dans le forum Développement
    Réponses: 2
    Dernier message: 12/07/2002, 15h40

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