我正在重写一个 LOB 应用程序,其架构如下:
Silverlight && Windows Mobile -> WCF -> 实体框架 -> 数据库。
移动应用程序应该能够像 Silverlight 应用程序那样做某些事情。在这里使用 RIA 服务可以获得什么好处?RIA 服务相对于 WCF 的优缺点是什么?
我正在重写一个 LOB 应用程序,其架构如下:
Silverlight && Windows Mobile -> WCF -> 实体框架 -> 数据库。
移动应用程序应该能够像 Silverlight 应用程序那样做某些事情。在这里使用 RIA 服务可以获得什么好处?RIA 服务相对于 WCF 的优缺点是什么?
.NET RIA 服务是为在浏览器中运行的 Silverlight 创建的。Silverlight 正在运行一个特殊版本的 .NET 框架,并且在 N 层应用程序中,Silverlight 无法与服务器端共享程序集。通过采用一些巧妙的代码生成.NET RIA 服务,开发人员几乎看不到这种差距。类似于域类的类是在客户端生成的代码,并且还提供了在客户端和服务器之间来回移动对象的方法。
您可能能够从 Windows Mobile 调用 .NET RIA 服务,但我认为这并不容易,而且目前您实际上可能必须对在线发送的内容进行逆向工程(使用 JSON)。另一方面,WCF 具有更广泛的范围,但不像 .NET RIA 服务那样支持 Silverlight 开发。
如果您正在编写仅 Silverlight 的 N 层应用程序,.NET RIA 服务非常强大。但是,如果 Silverlight 只是几个客户端之一,WCF 可能是更好的选择。
请注意 .NET RIA 服务尚未发布,但可以下载预览版。
WCF RIA 服务为您在使用 Silverlight 的 WCF 时遇到的挑战引入了几种解决方案。例如,使用 的异步加载查询EntityQuery<T>
比 WCF 提供的 Begin..End 解决方案要容易得多。此外,RIA 提供来自您的客户的集成更改跟踪,允许将多个更改作为一个更改集提交或拒绝。RIA 会将所有这些更改捆绑到一个请求中,但是从您的域服务中,它的行为就像是单独的调用一样。作为一名长期的 WCF 开发人员,我可以告诉您,这很容易。
创建 Ria 服务只是为了与 Silverlight 一起使用。它们基本上是可供 Silverlight 使用的标准“包”。优点是您无需编写代码即可拥有很多服务,即:
Ria 所做的所有事情都可以使用 WCF 和其他可用软件,特别是使用 Wcf 数据服务来完成。例如对于数据注释,我发现这个库比 Ria 服务做得更好,对成员资格的支持只需要激活 WCF 服务的现有成员资格端点,最后通过编写 WCF 行为很容易解决异常问题。代码可在此处获得:http://www.silverlightshow.net/Storage/10Tips.zip 关键是,使用 Ria 服务,您只需单击鼠标即可完成所有这些!另一方面,Ria 服务真的很难定制......所以如果您不喜欢他们提供的标准解决方案,您根本无法使用它们
RIA 服务建立在 WCF 之上。随着 PDC 的发布,这将更加明显。RIA Services 简化了客户端编程模型,使其与您的服务器端 DomainService 和实体非常匹配。
不管答案:
RIA 服务建立在 WCF 之上。随着 PDC 的发布,这将更加明显。RIA Services 简化了客户端编程模型,使其与您的服务器端 DomainService 和实体非常匹配。
对我来说(我想对于主题作者来说)除了访问 DomainService(这与 WCF 提供的相同)之外,还不清楚 RIA 服务还提供什么?
谢谢。
在正式发布 WCF RIA 服务之前,我认为这个问题没有明确的答案。在当前的 Beta 版中(对于 VS 2008,SL 3),RIA Services 不会隐藏服务调用的异步特性;你仍然需要提供一个回调方法。此外,RIA 服务目前不支持用户定义的类(或用户定义的类的集合)作为 RIA 服务调用的参数或返回值。我在通过 RIA 服务提供不可编辑的实体类时也遇到了麻烦。(错误说实体集合不可编辑。是的,这实际上是我想要的......)
在这一点上,我需要回过头来重新审视一下如何让普通的旧 WCF 工作。考虑到我们正在开发的应用程序的大小,这并不是那么简单,但它似乎是可行的解决方案,直到 MS 解决了 RIA 服务的一些当前问题。
.NET RIA Services 在 2009 年 11 月举行的 PDC 中被命名为 WCF RIA Services。由于它是建立在 WCF 之上的,因此命名为WCF RIA Services。
您需要使用 WCF RIA 服务来构建涉及数据库的 N 层应用程序(或任何需要沿层携带的信息)。