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