为什么从WCF服务返回数据集或数据表不是一个好习惯? 有什么替代品?

我正在使用大学管理系统,我正在使用WCF服务,在服务中我使用DataTables和DataSets从数据库和数据库获取数据是sql server。

我的问题是

  • 使用DataTables和数据集“良好实践”还是“不良实践”?
  • 如果不好,DataTable / DataSet的替代方案是什么?
  • 如果不好,主要原因是什么?

从Web服务返回数据集通常不被视为“良好实践”。 这些问题已在以下链接中详细记录:

http://msdn.microsoft.com/en-us/magazine/cc163751.aspx
http://www.4guysfromrolla.com/articles/051805-1.aspx
http://msdn.microsoft.com/en-us/magazine/cc188755.aspx

总之,从Web服务返回DataSet对象的最大问题似乎涉及序列化性能,非.NET互操作性。 此外, DataSet的通用多态性通常会使数据结构高到运行时,因此,WSDL定义不提供方法签名的完整描述。 然而,与任何设计决策一样,您需要权衡成本与收益,并根据您的具体目标和约束确定最佳匹配。

在替代方案中,您可以考虑使用通用集合(例如List ),或者甚至考虑一些架构修订以允许使用ODATA。

以下链接为通过Web服务返回实体提供了一些很好的背景参考。 http://msdn.microsoft.com/en-us/library/orm-9780596520281-01-14.aspx http://www.codeproject.com/Articles/127395/Implementing-a-WCF-Service-with-Entity -Framework http://msdn.microsoft.com/en-us/data/hh237663.aspx

在WCF服务中,返回类型失败的原因有三个作为数据表

  • 您必须指定数据表名称,如:

     MyTable=new DataTable("tableName"); 
  • 当您在WCF服务的客户端添加引用时,请选择可重用的dll system.data

  • datatable成员变量上指定属性,如

     [DataMember] public DataTable MyTable{ get; set; } 

我在我的WCF应用程序中使用DataTable ,但是收到错误。 这是我修复错误的方法。

将DataTable从WCF中的Web服务返回到Windows窗体应用程序时。 我得到了这个例外。

System.ServiceModel.CommunicationException:’接收到http:// localhost:52968 / MunerahService1.svc的HTTP响应时发生错误。 这可能是由于服务端点绑定不使用HTTP协议。 这也可能是由于服务器中止HTTP请求上下文(可能是由于服务关闭)。 有关详细信息,请参阅服务器日志。

它发生在我试图检索DataTable任何时候

要修复exception,我需要为DataTable命名。

代码有错误

  tab = new DataTable(); 

修复了删除摘要的代码

  tab = new DataTable("Doctor_info");