RIA服务与WCF服务之间的区别是什么?

20
有很多关于如何使用.NET RIA服务构建Silverlight应用程序的信息,但不清楚RIA中唯一的独特之处在哪里?以下是一些讨论此问题的话题:[1][2],但它们并没有回答这个问题。如果你已经有Silverlight <--> WCF Service <--> Business Logic <--> Entity Framework Model <--> Database,那么RIA Services层会为你的应用程序带来什么?认证?验证?它对你真正有用吗?目前我看到的唯一好处是:使用RIA服务可以省去手动主机WCF服务和在客户端(即Silverlight应用程序)配置任何引用的麻烦。也许我不知道RIA Services的一些非常有用的功能?所以,请您指向一些好的文档吗?谢谢。PS:我已经阅读了很多不同的文章,但无法澄清...所有的文章都在“周围讲述”,没有具体的内容。如果您要给我提供额外的文章链接,能否请您提供一份您认为的好处列表。
2个回答

12

实际上,您可以在不使用RIA Services的情况下使用相同的验证和身份验证。 RIA Services为您提供了代码生成。它会为您创建类,您只需要放置业务逻辑。我认为RIA Services非常适用于快速开发中小型应用程序。

另一个区别是它隐藏了对Web服务的异步调用。许多人不喜欢异步模型(这是Silverlight中唯一可用的模型),而RIA服务为您处理这个问题。

我建议阅读Shawn Wildermuth的这篇文章,他指出了两种方法的利弊,并包括ADO.NET数据服务(现在称为WCF数据服务):

http://wildermuth.com/2009/09/29/Choosing_a_Data_Access_Layer_for_Silverlight_3


Arturo,谢谢你提供的链接,它给了我一些思考的食粮...但是无论如何,对我来说RIA的好处还不清楚。从链接文章中我得到的唯一新信息是:RIA服务与WebServices(或使用WsHttpBasic传输协议的WCF)非常相似,并提供了将LinQ查询应用于调用方法的附加能力。它们将在服务器端执行吗?这就是全部吗? - Budda
是的,它们将在服务器端执行。RIA服务包括过滤器描述符,允许您将条件一直传递到数据库,这正是它们应该发生的地方。除此之外和上述原因之外,是的,就是这些了 :-) 对我来说,您得到的代码生成是其区别所在。 - Arturo Molina
Arturo,你如何在不重复代码的情况下将验证逻辑复制到客户端? - bob
您可以在模型上使用DataAnnotations。请查看:http://blogs.msdn.com/brada/archive/2010/03/23/silverlight-4-ria-services-ready-for-business-validating-data.aspx - Arturo Molina
谢谢提供链接,但我使用的是普通的WCF服务,确实在我的模型(BusinessEntities)上使用了DataAnnotations(!= DataContracts)。当我看到“实际上,您可以在不使用RIA服务的情况下使用相同的验证和授权...”时,我以为您有一种方法可以将验证规则推送到客户端而不需要重复编写代码... - bob
哦,好的,你的意思是不使用RIA服务,对此我很抱歉。我自己没有尝试过这个,但是这篇文章或许可以帮到你:http://www.c-sharpcorner.com/uploadfile/dpatra/dataannotationsinsilverlight3application07232009142241pm/dataannotationsinsilverlight3application.aspx - Arturo Molina

4
好的,我不同意之前发布的答案。WCF Ria Services是一种很好的架构,时间已经证明它的价值。建议您查看http://blogs.msdn.com/b/saurabh/archive/2009/11/23/understanding-the-wcf-in-wcf-ria-services.aspx。实际上,我在一个大的LOB应用程序中使用WCF Ria Services,目标用户为1500+。我进行了大量的客户端代码生成自定义(有关详细信息,请参见Varun's blog),但我能够在Silverlight中使用LINQ over the wire,并且可以选择在上下文中的实体之间自动惰性或急切加载。而且请不要忘记,WCF Ria Services的rest范例还允许使用OutputCache。另外,由于自定义元数据提供程序,您可以极大地简化客户端的生成以及将数据序列化到客户端的过程。我认为如果您的Silverlight应用程序是基于Context的,那么完全可以使用WCF Ria Services。希望这可以帮到您,Marco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接