22

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

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

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

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

4

5 回答 5

9

我的两(欧元)美分:

当服务可以被视为应用程序的业务层时,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 中开发过任何东西。

于 2009-10-17T19:38:02.990 回答
5

我们使用 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 知道他的东西,而且他非常乐于助人。

于 2009-10-19T14:11:46.733 回答
3

我想我再也不会去痘了。如果您编写 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 将数据和业务与表示代码分开。除此之外,您可以选择将数据访问视为一个层,而不是一个完全独立的层。

于 2009-10-17T20:49:00.803 回答
3

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

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

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

于 2012-02-08T22:47:46.153 回答
2

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

评论:

  • 我从未尝试过,但如果您真的需要,您也可以与其他客户端一起访问 RIA 服务,毕竟 RIA 服务是建立在 WCF 服务之上的。
  • 我不太了解 Akash Kava 的安全问题。您可以(并且必须)控制服务器端的安全性,就像您对任何其他服务所做的那样。
于 2012-02-15T18:39:22.637 回答