Entity framework WCF数据服务实施策略

Entity framework WCF数据服务实施策略,entity-framework,architecture,wcf-data-services,Entity Framework,Architecture,Wcf Data Services,微软做了一项精明的工作,没有勾勒出数据服务在SOA/Web开发的精彩世界中的实际位置 所以我的问题是,WCF数据服务是否设计为通过外部客户端使用?有没有人听说过有人在服务器端使用它们(即web服务的数据库访问) 简单场景使用BO业务对象的通用分层体系结构(括号表示层间传递的内容) (XML)WCF服务->(BO)业务逻辑->(BO)Dao->实体框架 或者使用数据服务,DS BO将被建模为用于数据服务的业务实体 (XML)WCF服务->(BO)业务逻辑->(BO)WCF数据服务->(DS BO)

微软做了一项精明的工作,没有勾勒出数据服务在SOA/Web开发的精彩世界中的实际位置

所以我的问题是,WCF数据服务是否设计为通过外部客户端使用?有没有人听说过有人在服务器端使用它们(即web服务的数据库访问)

简单场景使用BO业务对象的通用分层体系结构(括号表示层间传递的内容)

(XML)WCF服务->(BO)业务逻辑->(BO)Dao->实体框架

或者使用数据服务,DS BO将被建模为用于数据服务的业务实体

(XML)WCF服务->(BO)业务逻辑->(BO)WCF数据服务->(DS BO)服务器

我看不出后者有什么用处,除非有很多情况下人们会通过数据服务层和服务层访问您的数据

任何人,任何类型的参考文件,将有助于支持它将是有用的


我正在寻找优点/缺点,以帮助像我这样的其他人定义何时/何地使用数据服务。

不要做第二件事

WCF数据服务接口基于Atom Pub,它基于面向客户端的REST

这是一个关键原因。您不能通过WCF数据服务接口执行两阶段提交事务,我希望WCF团队永远不要尝试启用它

WCF数据服务是将数据公开给远程客户端,而不是作为体系结构中的一个层

所以我的问题很简单,WCF数据 旨在通过以下方式使用的服务: 客户?或者有人听说过有人在服务器端使用它们吗

请记住,“客户机”一词含义广泛,可以具体包括后端系统,因此从这个意义上说,简短的回答是肯定的。我没听说过有人在服务器端使用它们,但没有理由不使用;RSS用于在系统之间联合数据,WCF数据服务将是另一种方式

也许你是从一个以技术为中心的角度来看待这个问题,而你真的需要更全面地思考吗?WCF数据服务只是一种工具——在适当的地方使用它们


看看其中的一些,WCF数据服务似乎有着相当广泛的可能应用。

以下是我在这个主题上的所有发现

数据服务的目的是通过web URI公开某种类型的资源。通过标准HTTP谓词(GET、POST、PUT、DELETE)访问/更改所有数据

DS(完全可配置)的标准响应是JSON/Atom

开箱即用的数据服务被设计为任何需要通过web访问其数据的客户机类型的后端访问层

数据服务支持添加额外的业务逻辑(通过服务操作/拦截器),但通常用于业务逻辑受限的情况

总之,数据服务是面向客户的,您将公开您的数据,以便可以从其他机构通过web访问数据。虽然您可以强制数据服务适应后端服务器数据访问层,但只有在找到合理理由的情况下,才应该这样做。数据服务带来了大量不必要的性能和编码开销

我没有发现任何建议将其用作服务器端应用程序的dao层的资源(博客或文章)

在服务器端使用数据服务的案例:

1) 更易于版本化的数据服务。我可以发布不同版本的实体模型,而不会影响使用它的每个人(有人可能会说,只需使用ADO.NET实体模型,您就可以做更多的工作)

2) 希望能够访问较低级别的数据。您允许对数据库进行后门访问。在高层中,您公开了一个业务服务,而一个后门数据访问服务。可能存在这样一种情况:另一个域的数据模型中只有一部分共享数据,需要对模型中的某些内容进行过滤。数据服务将允许您通过URI进行通信

资源


在数据服务上设置数据访问层是自杀。WCF数据服务适用于远程客户端。就是这样。

EF的性能很低,因此它对于高性能服务来说是一个糟糕的解决方案。EF将用于这两种情况,并且性能对于我们的吞吐量来说是可以接受的。您能否详细说明两阶段提交事务限制?您只是在谈论通过编程控制两阶段提交,还是内部问题?如果您在这里搜索REST事务,您将看到大量关于这方面的讨论。我关于这个问题的答案在这里,请注意你的答案(拼写检查),以及阅读问题。这没有任何答案。我在问题中说,“我看不到后者的用途,除非有很多情况下人们会通过数据服务层访问您的数据”,如果出于某种原因,您公开了两个接口,一个是业务服务,一个是数据服务,我可以看到这种体系结构的需要/用途,但除此之外,为什么任何人都要经历使用数据服务访问数据库的所有麻烦呢?当你只钉一颗钉子的时候,为什么要拔出钉子枪呢?在这种情况下,不要说你的问题很简单;我给了你我的想法(第一部分),特别是-你完全有权投票反对,如果它不是你想要的。我承认我发现你的第二个问题/例子有点难以完全理解,但仅仅通过书面文本传达这类信息并不总是容易的。我为拼写错误道歉,但我亲爱的说我见过更糟糕的;我认为当人们在这里提问时