C# 为什么从WCF服务返回数据集或数据表不是一个好做法?有哪些替代方案?
我在大学管理系统上工作,我在该系统上使用WCF服务,在该服务中,我使用数据表和数据集从数据库获取数据,数据库是sql server 我的问题是C# 为什么从WCF服务返回数据集或数据表不是一个好做法?有哪些替代方案?,c#,sql,wcf,datatable,dataset,C#,Sql,Wcf,Datatable,Dataset,我在大学管理系统上工作,我在该系统上使用WCF服务,在该服务中,我使用数据表和数据集从数据库获取数据,数据库是sql server 我的问题是 使用数据表和数据集是“好做法”还是“坏做法” 如果是坏的,DataTable/DataSet的替代方案是什么 如果情况不好,主要原因是什么 从web服务返回数据集通常不被视为“良好实践”。这些问题已在以下链接中详细记录: 总之,从web服务返回DataSet对象的最大问题似乎涉及序列化性能、非.net互操作性。此外,数据集的通用多态性通常会在运行
- 使用数据表和数据集是“好做法”还是“坏做法”
- 如果是坏的,DataTable/DataSet的替代方案是什么
- 如果情况不好,主要原因是什么
总之,从web服务返回
DataSet
对象的最大问题似乎涉及序列化性能、非.net互操作性。此外,数据集
的通用多态性通常会在运行时之前影响数据结构,因此,WSDL定义没有提供方法签名的完整描述。但是,与任何设计决策一样,您需要权衡成本与收益,并根据特定的目标和约束条件确定最佳匹配
在备选方案方面,您可以考虑使用泛型集合(例如,代码>清单< /代码>),或者甚至可以考虑一些架构修订以允许使用ODATA。
以下链接为通过web服务返回实体提供了一些良好的背景参考。在WCF服务中,返回类型失败的原因有三个,即
datatable
- 必须指定数据表名称,如:
MyTable=new DataTable("tableName");
- 在WCF服务的客户端添加引用时,请选择可重用dll
system.data
- 在
成员变量上指定属性,如datatable
[DataMember] public DataTable MyTable{ get; set; }
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服务会给其他平台带来互操作性问题/挑战。这并没有真正回答原来的问题,或者是不是?