Procedura: Bloccare i dati serializzati
Due problemi che si verificano durante l'invio di insiemi di dati di grandi dimensioni nei messaggi del servizio Web sono:
Un working set (memoria) di grandi dimensioni, dovuti alla memorizzazione dei dati nel buffer da parte del motore di serializzazione.
Consumo di larghezza di banda non controllato, dovuto all'ingrandimento del 33 percento successivo alla codifica Base64.
Per risolvere questi problemi, implementare l'interfaccia IXmlSerializable per controllare la serializzazione e la deserializzazione. In particolare, implementare i metodi WriteXml e ReadXml per suddividere i dati.
Per implementare il chunking lato server
Sul server, il metodo Web deve disattivare la memorizzazione nel buffer ASP.NET e restituire un tipo che implementi IXmlSerializable.
Il tipo che implementa IXmlSerializable, suddivide i dati nel metodo WriteXml.
Per implementare l'elaborazione lato client
Modificare il metodo Web sul proxy client in modo che restituisca il tipo che implementa IXmlSerializable. È possibile utilizzare SchemaImporterExtension per eseguire automaticamente questa procedura ma tale operazione non viene mostrata in questo esempio.
Implementare il metodo ReadXml per leggere il flusso di dati suddiviso e scrivere i byte su disco. Questa implementazione genera inoltre eventi relativi allo stato di avanzamento che possono essere utilizzati da un controllo grafico, ad esempio un indicatore di stato.
Esempio
Nell'esempio di codice riportato di seguito viene mostrato il metodo Web sul client che disattiva la memorizzazione nel buffer ASP.NET. L'esempio mostra inoltre l'implementazione lato client dell'interfaccia IXmlSerializable che suddivide i dati nel metodo WriteXml.
Compilazione del codice
- Nel codice riportato di seguito vengono utilizzati i seguenti spazi dei nomi: System, System.Runtime.Serialization, System.Web.Services, System.Web.Services.Protocols, System.Xml, System.Xml.Serialization e System.Xml.Schema.
Vedere anche
Concetti
Serializzazione personalizzata
Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.