您的位置:首页 > 其它

WCF学习笔记:传递DataTable 报错是因为WCF不支持DataTable数据类型,DataContractSerializer 支持的类型

2011-11-18 13:25 519 查看
最近在学习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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: