C# 为什么从WCF服务返回数据集或数据表不是一个好做法?有哪些替代方案?

C# 为什么从WCF服务返回数据集或数据表不是一个好做法?有哪些替代方案?,c#,sql,wcf,datatable,dataset,C#,Sql,Wcf,Datatable,Dataset,我在大学管理系统上工作,我在该系统上使用WCF服务,在该服务中,我使用数据表和数据集从数据库获取数据,数据库是sql server 我的问题是 使用数据表和数据集是“好做法”还是“坏做法” 如果是坏的,DataTable/DataSet的替代方案是什么 如果情况不好,主要原因是什么 从web服务返回数据集通常不被视为“良好实践”。这些问题已在以下链接中详细记录: 总之,从web服务返回DataSet对象的最大问题似乎涉及序列化性能、非.net互操作性。此外,数据集的通用多态性通常会在运行

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

我的问题是

  • 使用数据表和数据集是“好做法”还是“坏做法”
  • 如果是坏的,DataTable/DataSet的替代方案是什么
  • 如果情况不好,主要原因是什么

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



总之,从web服务返回
DataSet
对象的最大问题似乎涉及序列化性能、非.net互操作性。此外,
数据集
的通用多态性通常会在运行时之前影响数据结构,因此,WSDL定义没有提供方法签名的完整描述。但是,与任何设计决策一样,您需要权衡成本与收益,并根据特定的目标和约束条件确定最佳匹配

在备选方案方面,您可以考虑使用泛型集合(例如,代码>清单< /代码>),或者甚至可以考虑一些架构修订以允许使用ODATA。

以下链接为通过web服务返回实体提供了一些良好的背景参考。

在WCF服务中,返回类型失败的原因有三个,即
datatable

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

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

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

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

我在我的WCF应用程序中使用了
DataTable
,但得到了一个错误。这就是我修复错误的方法

从WCF中的web服务向windows窗体应用程序返回数据表时。我得到了这个例外

System.ServiceModel.CommunicationException:'接收对的HTTP响应时出错。这可能是由于服务端点绑定未使用HTTP协议造成的。这也可能是由于服务器中止了HTTP请求上下文(可能是由于服务关闭)。有关详细信息,请参阅服务器日志。”

每当我试图检索
DataTable

为了修复这个异常,我需要给
DataTable
一个名称

用错误编码

 tab = new DataTable(); 
修正了删除EXC选项的代码

 tab = new DataTable("Doctor_info");

SCOTT HANSELMANAre您是在服务中使用它们,还是在服务之外使用它们,例如返回它们?您所构建的服务的责任是什么,您知道(并拥有控制权)吗通过客户端?@nvoigt:我在内部和外部使用数据表/数据集Outside@Jocke:是的,我可以控制客户端+1,但请简要概述这些链接中的内容。你能给我提供一些有关集合或任何链接的示例吗???@Seymour:使用DataSet/DataTable,WCF服务的互操作性将超过.Net平台是否保留?一般来说,我认为返回数据集的WCF服务会给其他平台带来互操作性问题/挑战。这并没有真正回答原来的问题,或者是不是?