WCF学习笔记:传递DataTable 报错是因为WCF不支持DataTable数据类型,DataContractSerializer 支持的类型
最近在学习WCF,想传递从数据库中查询的大量数据到客户端显示,用DataTable做数据载体,结果老是报下面这个错误:
接收对 http://localhost:8731/wcfServices/Mate 的 HTTP 响应时发生错误。这可能是由于服务终结点绑定未使用 HTTP 协议造成的。这还可能是由于服务器中止了 HTTP 请求上下文(可能由于服务关闭)所致。有关详细信息,请参阅服务器日志
上谷歌,找各种原因和解决方案,总结如下:
【1】传输的数据量太大,在配置文件中修改Behaviors节点内容
服务端:
<behaviors>
<serviceBehaviors>
<behavior name="MathServices">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<dataContractSerializer maxItemsInObjectGraph="65536000"/>
</behavior>
</serviceBehaviors>
</behaviors>
客户端:
<behaviors>
<endpointBehaviors>
<behavior name="MathServices">
<dataContractSerializer maxItemsInObjectGraph="65536000"/>
</behavior>
</endpointBehaviors>
</behaviors>
【2】WCF不支持DataTable数据类型
默认情况下,WCF 使用 DataContractSerializer 类来序列化数据类型。此序列化程序支持下列类型:
(1)基元类型(如:整数、字符串和字节数组)以及某些特殊类型(如 XmlElement 和 DateTime),这些特殊类型也被视为基元类型。
(2)数据协定类型(用 DataContractAttribute属性标记的类型)。
(3)用 SerializableAttribute 属性标记的类型,包括实现 ISerializable接口的类型。
(4)实现 IXmlSerializable接口的类型。
(5)许多常见集合类型,包括许多泛型集合类型。
老徐的博客有遍文章讲WCF支持的数据类型很详细,推荐给大家参考:http://www.frankxulei.com/?p=183