Gewusst wie: Segmentieren serialisierter Daten
Beim Senden großer Datasätze in Webdienstnachrichten treten die zwei Probleme auf:
Ein großes Workingset (Arbeitsspeicher) aufgrund der Pufferung durch das Serialisierungsmodul
Unregelmäßige Bandbreitennutzung aufgrund von 33 % Inflation nach der Base64-Codierung
Zur Lösung dieser Probleme implementieren Sie die IXmlSerializable-Schnittstelle, um die Serialisierung und Deserialisierung zu steuern. Implementieren Sie insbesondere die WriteXml-Methode und die ReadXml-Methode, um die Daten zu segmentieren.
So implementieren Sie serverseitige Segmentierung:
Die Webmethode muss die ASP.NET-Pufferung auf dem Servercomputer deaktivieren und einen Typ zurückgeben, der IXmlSerializable implementiert.
Der Typ, der IXmlSerializable implementiert, segmentiert die Daten in der WriteXml-Methode.
So implementieren Sie clientseitige Verarbeitung
Ändern Sie die Webmethode auf dem Clientproxy so, dass der Typ zurückgegeben wird, der IXmlSerializable implementiert. Sie können SchemaImporterExtension verwenden, um diesen Vorgang automatisch auszuführen, aber dies wird hier nicht beschrieben.
Implementieren Sie die ReadXml-Methode, um den segmentierten Datenstream zu lesen und die Bytes auf den Datenträger zu schreiben. Diese Implementierung löst auch Statusereignisse aus, die von einem grafischen Steuerelement, z. B. einer Statusleiste, verwendet werden können.
Beispiel
Das folgende Codebeispiel veranschaulicht die Webmethode auf dem Client, mit der die ASP.NET-Pufferung deaktiviert wird. Es zeigt zudem die clientseitige Implementierung der IXmlSerializable-Schnittstelle, die die Daten in der WriteXml-Methode segmentiert.
Kompilieren des Codes
- In diesem Code werden die folgenden Namespaces verwendet: System, System.Runtime.Serialization, System.Web.Services, System.Web.Services.Protocols, System.Xml, System.Xml.Serialization und System.Xml.Schema.
Siehe auch
Konzepte
Benutzerdefinierte Serialisierung
Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.