Comment : segmenter des données sérialisées
Les deux problèmes qui se produisent lors de l'envoi de grands ensembles de données dans des messages de services Web sont les suivants :
Un grand jeu de travail (mémoire) en raison d'une mise en mémoire tampon effectuée par le moteur de sérialisation.
Une consommation de bande passante importante due à une inflation de 33 % après un codage Base64.
Pour résoudre ces problèmes, implémentez l'interface IXmlSerializable pour contrôler la sérialisation et la désérialisation. Plus précisément, implémentez les méthodes WriteXml et ReadXml pour segmenter les données.
Pour implémenter la segmentation côté serveur
Sur l'ordinateur serveur, la méthode Web doit désactiver la mise en mémoire tampon ASP.NET et retourner un type qui implémente IXmlSerializable.
Le type qui implémente IXmlSerializable segmente les données dans la méthode WriteXml.
Pour implémenter le traitement côté client
Modifiez la méthode Web sur le proxy client pour retourner le type qui implémente IXmlSerializable. Vous pouvez utiliser un SchemaImporterExtension pour effectuer cette opération automatiquement (non illustrée ici).
Implémentez la méthode ReadXml pour lire le flux de données segmenté et écrire les octets sur le disque. Cette implémentation déclenche également des événements de progression qui peuvent être utilisés par un contrôle graphique, tel qu'une barre de progression.
Exemple
L'exemple de code suivant illustre la méthode Web sur le client qui désactive la mise en mémoire tampon ASP.NET. Il affiche également l'implémentation côté client de l'interface IXmlSerializable qui segmente les données dans la méthode WriteXml.
Compilation du code
- Le code utilise les espaces de noms suivants : System, System.Runtime.Serialization, System.Web.Services, System.Web.Services.Protocols, System.Xml, System.Xml.Serialization et System.Xml.Schema.
Voir aussi
Concepts
Copyright ©2007 par Microsoft Corporation. Tous droits réservés.