如何为新的 Silverlight 应用程序在 WCF、REST、POX 和 RIA 服务之间进行选择

Posted

技术标签:

【中文标题】如何为新的 Silverlight 应用程序在 WCF、REST、POX 和 RIA 服务之间进行选择【英文标题】:How do I choose between WCF, REST, POX and RIA services for a new Silverlight application 【发布时间】:2010-12-07 15:57:43 【问题描述】:

Silverlight 应用程序可以通过多种不同方式连接回其服务器。包括

WCF - Windows Communication Foundation REST(见also) ADO.NET Data Services(或者这只是 REST?) POX - 普通旧 XML(例如基本 xml) RIA services

对于这些,请说明它的用途以及您何时会或不会使用它。我不是在寻找大量细节,只是在它们之间进行选择的一组“经验法则”。

(问题在于,在设计您的第一个 Silverlight 应用程序时,您知道在没有时间学习所有这些应用程序时要使用什么。)

如果我在这个问题中将 Silverlight 替换为 WPF,会对您的答案产生什么影响? (我假设使用 WPF,由于防火墙和管理策略,直接连接到数据库不是一种选择。)

【问题讨论】:

【参考方案1】:

我的两(欧元)美分:

WCF 似乎最适合将服务视为应用程序的业务层时,也就是说,当您的服务具有“智能”操作时,例如 “CalculateDiscountForClient” .

ADO.NET 数据服务(实际上,只是一个 REST 实现)在您的应用程序基本上以数据为中心并且服务只是数据库的前端时似乎合适。也就是说,您所有的服务方法都是 GetCustomers、CreateInvoice、 等类型的。

RIA 服务 是一种非常新的技术,我还没有尝试过,但是创建 Silverlight 部分和服务紧密耦合的应用程序似乎很有用:您定义您在服务项目中的服务类和方法,它们会在设计时自动复制到 Silverlight 项目。此外,您可以定义 WCF 样式的“操作”方法和 ADO.NET 数据服务样式的“数据”方法。看起来很有希望。

如果将来有可能将客户端部分从 Silverlight 更改为任何其他技术(例如 html+AJAX),请使用 POX,因为它是最具互操作性的选项。

关于 WPF 的差异,我唯一能想到的是,对于数据访问,我会尽可能使用直接 ADO.NET 数据连接(正确嵌入数据访问层、LINQ to SQL 等)而不是ADO.NET 数据服务,因为它更加灵活。无论如何,我必须说我从未在 WPF 中开发过任何东西。

【讨论】:

【参考方案2】:

我们使用 RIA,这是我知道的唯一选项之一,但我确实知道,所以这是我的一些想法。

RIA 尚未完成。它正在研究中。如果您计划很快完成,并且您担心必须支持可能会发生很大变化的东西,那么您可能需要考虑其他选择。如果这是一个新项目,并且您将长期支持它,RIA 可能会变得更容易使用。

话虽如此,我还是认为RIA 7 月预览版的工作方式和最终版本的工作方式不会有太多变化。此外,支持水平似乎表明这将成为与 Silverlight 中的服务器对话的“方式”。

只是因为值得一提,有一些链接:

http://blogs.msdn.com/brada/ Brad Abrams 有一个他不断更新的例子。

http://forums.silverlight.net/forums/53.aspx 这是你提问的地方。

http://www.riaservicesblog.com/Blog/Colin Blair 知道他的东西,而且他非常乐于助人。

【讨论】:

【参考方案3】:

我想我再也不会去 POX 了。如果您编写 WCF 以便服务本身独立于绑定并且绑定在配置文件中完成,那么 WCF 几乎与传输和协议无关。它可以执行 SOAP、JSON、REST 或它自己的二进制序列化形式。所有这些都在绑定中。在内部,WCF 仅指定在操作和数据协定(均由类、方法和属性属性定义)方面公开的内容。 WCF 在这方面为您提供了极大的灵活性,2010 年还会提供更多。

在 Silverlight 方面,WCF 要求您编写一些管道代码。 .NET 框架具有在 Silverlight 项目中构建代理的工具,但您必须准备好异步处理所有 WCF 响应,并且代理无法捕获服务引发的异常。

.NET RIA 服务隐藏了这一切。它在幕后使用 WCF,但这是完全隐藏的。您不必编写异步代码。您定义一次验证,主要是声明式的,它在服务器端和客户端都有效。第 1 版将针对 Silverlight,因此您无法在其他地方使用该服务。这个范围应该会在以后的版本中扩大。

我对 ADO.NET 数据服务了解不够,无法进行比较。我怀疑答案将取决于您是否希望将数据暴露给 Silverlight 以外的其他用途。

.NET RIA 服务看起来是我想要的方向(我自己研究这些问题,考虑到一个大型应用程序)。对我来说,最大的问题是在服务层实现非常大的功能集合,并且无法直接对数据访问层进行编码(我们必须能够在 SQL Server 或 Oracle 上运行)。

使用 WPF 而不是 Silverlight 会改变一切,具体取决于您的数据所在的位置。这就像 Winforms 与 ASP.NET 的老问题。使用 WPF,您正在构建一个 Windows 客户端应用程序,并且您根本不需要使用任何形式的基于服务的数据接口,除非您的数据访问迫使您使用它。您仍然需要使用 MVVM、MVC 或 MVP 将数据和业务与表示代码分开。除此之外,您可以选择将数据访问视为一个层,而不是一个完全独立的层。

【讨论】:

【参考方案4】:

WCF 是 Microsoft 的服务通信标准。我强烈建议任何人使用将于 2012 年 4 月发布的 WCF Web API(使用 WCF,但专门为 REST 定制)创建服务层。WCF Web API 目前处于预览模式。

记住这些经验法则: - 你的 UI 会比你的服务层改变得更快。 RESTful 服务将在几年后出现,Silverlight 可能不会 - 你的服务会成为 API 吗?嗯...WCF REST 是要走的路 - 你会混合使用 javascript 和 Silverlight 代码吗? WCF REST 将使您的生活更轻松 - 你有移动组件吗(因为 Silverlight 不能在 iosandroid 上运行)...首选 REST。

不要为技术量身定制,而是要为整个应用量身定制。

【讨论】:

【参考方案5】:

如果您想创建 Silverlight 应用程序并且您不关心其他客户端,那么我会选择 RIA 服务。使用起来非常轻松,您无需担心来自客户端的连接是如何建立的(即无需客户端配置)。 RIA 还为客户端上的所有实体生成类,如果需要,您甚至可以与客户端共享您自己的“服务器”代码(对于枚举或扩展方法很有用)。

备注:

我从未尝试过,但如果您确实需要,您也可以通过其他客户端访问 RIA 服务,毕竟 RIA 服务是建立在 WCF 服务之上的。 我不太了解 Akash Kava 的安全问题。您可以(并且必须)控制服务器端的安全性,就像您对任何其他服务所做的那样。

【讨论】:

以上是关于如何为新的 Silverlight 应用程序在 WCF、REST、POX 和 RIA 服务之间进行选择的主要内容,如果未能解决你的问题,请参考以下文章

如何为新的 android 版本设置更新优先级

我应该如何为 Firebase 身份验证创建新的联合身份提供程序

如何为较旧和较新的 Android 版本实现不同的 API?

SAP Commerce Cloud 如何为 Storefront 配置新的应用

如何为新的应用获取更高的关键字排名

如何为句子中的每个单词分组?