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

 

posted @ 2011-11-18 13:25  shuhaicaiyun  阅读(1818)  评论(3编辑  收藏  举报