为什么从WCF服务返回数据集或数据表不是一个好的做法?备选方案是什么

本文关键字:一个 是什么 方案 返回 服务 WCF 数据集 数据表 为什么 | 更新日期: 2023-09-27 18:22:01

我在大学管理系统上工作,在该系统上我使用WCF服务,在该服务中我使用DataTables和DataSet从数据库中获取数据,数据库是sql server。

我的问题是

  • 使用数据表和数据集是"良好做法"还是"不良做法"
  • 如果它不好,那么DataTable/Datat的替代方案是什么
  • 如果情况不好,主要原因是什么

为什么从WCF服务返回数据集或数据表不是一个好的做法?备选方案是什么

从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");
相关文章: