为什么从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");