如何:对序列化数据进行分块

在 Web 服务消息中发送大型数据集时,会出现下面两个问题:

  1. 因序列化引擎执行缓冲而使工作集(内存)很大。

  2. 因使用 Base64 编码后产生 33% 的膨胀而过度占用带宽。

若要解决这两个问题,可以通过实现 IXmlSerializable 接口,来控制序列化和反序列化。具体来讲,就是实现 WriteXmlReadXml 方法,对数据进行分块。

实现服务器端数据分块

  1. 在服务器计算机上,必须采用 Web 方法禁用 ASP.NET 缓冲,并返回实现 IXmlSerializable 的类型。

  2. 实现 IXmlSerializable 的类型可以采用 WriteXml 方法对数据进行分块。

实现客户端处理

  1. 通过更改客户端代理上的 Web 方法,可以返回实现 IXmlSerializable 的类型。可以使用 SchemaImporterExtension 自动执行这项操作,但此处不加以说明。

  2. 通过实现 ReadXml 方法,可以读取分块数据流,并将字节写入磁盘。此实现还会引发可供图形控件(如进度栏)使用的进度事件。

示例

下面的代码示例演示客户端上用于禁用 ASP.NET 缓冲的 Web 方法。它还演示了如何在客户端实现 IXmlSerializable 接口,该实现可以采用 WriteXml 方法对数据进行分块。

编译代码

请参见

概念

自定义序列化

Footer image

版权所有 (C) 2007 Microsoft Corporation。保留所有权利。