DataTable in WCF

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


在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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值