在 Web 服务消息中发送大型数据集时,会出现下面两个问题:
- 因序列化引擎执行缓冲而使工作集(内存)很大。 
- 因使用 Base64 编码后产生 33% 的膨胀而过度占用带宽。 
若要解决这两个问题,可以通过实现 IXmlSerializable 接口,来控制序列化和反序列化。具体来讲,就是实现 WriteXml 和 ReadXml 方法,对数据进行分块。
实现服务器端数据分块
- 在服务器计算机上,必须采用 Web 方法禁用 ASP.NET 缓冲,并返回实现 IXmlSerializable 的类型。 
- 实现 IXmlSerializable 的类型可以采用 WriteXml 方法对数据进行分块。 
实现客户端处理
- 通过更改客户端代理上的 Web 方法,可以返回实现 IXmlSerializable 的类型。可以使用 SchemaImporterExtension 自动执行这项操作,但此处不加以说明。 
- 通过实现 ReadXml 方法,可以读取分块数据流,并将字节写入磁盘。此实现还会引发可供图形控件(如进度栏)使用的进度事件。 
示例
下面的代码示例演示客户端上用于禁用 ASP.NET 缓冲的 Web 方法。它还演示了如何在客户端实现 IXmlSerializable 接口,该实现可以采用 WriteXml 方法对数据进行分块。
编译代码
- 代码使用下面的命名空间:System、System.Runtime.Serialization、System.Web.Services、System.Web.Services.Protocols、System.Xml、System.Xml.Serialization 和 System.Xml.Schema。
请参见
概念
.gif)
版权所有 (C) 2007 Microsoft Corporation。保留所有权利。