为什么从WCF服务返回数据集或数据表不是一个好的做法?备选方案是什么
本文关键字:一个 是什么 方案 返回 服务 WCF 数据集 数据表 为什么 | 更新日期: 2023-09-27 18:22:01
我在大学管理系统上工作,在该系统上我使用WCF服务,在该服务中我使用DataTables和DataSet从数据库中获取数据,数据库是sql server。
我的问题是
- 使用数据表和数据集是"良好做法"还是"不良做法"
- 如果它不好,那么DataTable/Datat的替代方案是什么
- 如果情况不好,主要原因是什么
从web服务返回数据集通常不被视为"好做法"。这些问题已在以下链接中详细记录:
http://msdn.microsoft.com/en-us/magazine/cc163751.aspx
https://web.archive.org/web/20210125131938/https://www.4guysfromrolla.com/articles/051805-1.aspx
http://msdn.microsoft.com/en-us/magazine/cc188755.aspx
总之,从web服务返回DataSet
对象的最大问题似乎涉及序列化性能和非.net互操作性。此外,DataSet
的通用、多态性通常在运行时之前都会使数据结构变高,因此,WSDL定义没有提供方法签名的完整描述。然而,与任何设计决策一样,您需要权衡成本与收益,并在特定目标和限制条件下确定最适合的方案。
就替代方案而言,您可以考虑使用通用集合(例如List<yourClassHere>
),甚至可以考虑进行一些架构修订以允许使用ODATA。
以下链接为通过web服务返回实体提供了一些很好的背景参考。http://msdn.microsoft.com/en-us/library/orm-9780596520281-01-14.aspxhttp://www.codeproject.com/Articles/127395/Implementing-a-WCF-Service-with-Entity-Frameworkhttp://msdn.microsoft.com/en-us/data/hh237663.aspx
WCF服务中失败的返回类型datatable
有三个原因
-
您必须指定数据表名称,如:
MyTable=new DataTable("tableName");
-
当您在WCF服务的客户端添加引用时,请选择可重复使用的dll
system.data
-
在
datatable
成员变量上指定属性,如[DataMember] public DataTable MyTable{ get; set; }
我在WCF应用程序中使用DataTable
,但遇到错误。这就是我修复错误的方法。
从WCF中的web服务向windows窗体应用程序返回DataTable时。我得到了这个例外。
System.ServiceModel.CommunicationException:"接收对的HTTP响应时出错http://localhost:52968/MunerahService1.svc.这可能是由于服务端点绑定未使用HTTP协议。这也可能是由于服务器中止了HTTP请求上下文(可能是由于服务关闭)。有关详细信息,请参阅服务器日志。'
每当我试图检索DataTable
时,都会发生这种情况
为了修复异常,我需要给DataTable
一个名称。
带有错误的代码
tab = new DataTable();
修复了删除exception 的代码
tab = new DataTable("Doctor_info");