DataTable in WCF

来源:互联网 发布:多多软件站网页 编辑:程序博客网 时间:2024/05/16 23:02

在客户端与服务器之间交换的服务契约中,最常见的一种数据契约类型是数据库的类型。


在WCF中,我们可以定义DataSet和DataTable类型的服务契约。


【OperationContract】
DataTable ×××();

 

但是我在写程序的时候发现WCF不能传递DataTable类型。


解决方法或许有两种:
1)为DataTable赋一个TableName


2)声明DataSet类型服务契约,将Table添加到DataSet中,然后返回客户端,再引用DataSet中的表。
我使用了第二种方法,测试通过。不过看到网上一位台湾朋友试过第一种方法也是可以的。

BTW:本着SOA的原则和传输效率之类的考虑,不要在WCFServices中使用DataSet或DataTable作为数据传输载体。当然了,如果你的程序不跨平台(.NET--.NET)的话,DataSet之类的类型可以很好的工作,但是这时传输的数据量是比较大的(预设的MaxReceivedMessageSize为65536,視需要將 maxReceivedMessageSize 屬性調大並且將 maxBufferSize 數值與 maxReceivedMessageSize 需一致,預設 Binding 為 wsHttpBinding,若不考慮安全性可改為 basicHttpBinding 或是使用效率最好的 netTcpBinding )。

 

上述情况还有可能暴露内部的数据结构。同时,将来对数据库样式的修改会影响到客户端。通常情况下,更好的做法是暴露数据的操作而非数据本身。如果需要传递数据本身,最好的方法是使用与数据结构无关的类型,例如数组类型。(摘自《WCF服务编程》)书中还提供了一个DataTableHelper类,以解决这个问题。


所以,我们根据自己要实现的功能,按照数据契约的格式定义自己的数据契约,这样序列化的效率会高一些,而且节省了传输开销。毕竟DataSet和DataTable中包含了很多我们并不需要的信息。

 

转自:http://hi.baidu.com/kohlniu/blog/item/8daa09fcd455044cd6887da1.html

原创粉丝点击