创建 RIA Services 解决方案

WCF RIA Services 使您能够在创建业务应用程序时创建满足多种方案的解决方案。这些方案的范围很广,包括十分基本的方案和非常复杂的方案。例如,一个基本的方案可由单个 Silverlight 应用程序构成,该应用程序仅访问中间层中的几个域服务。复杂些的方案可以包含多个 Silverlight 应用程序,这些应用程序全都链接到公开大量域服务的公共中间层。本主题旨在解决在创建和管理 RIA Services 解决方案时出现的问题。它解决如下问题:

  • 构建 RIA Services 解决方案有哪几种方式?

  • 哪种结构最适合于特定方案?

  • 如何解决与解决方案有关的问题?

  • 如何部署解决方案?

本主题还为本节中包含的演练和其他主题提供了一些指导,这些演练和主题会引导您完成与许多 RIA Services 相关典型方案相关联的任务。本节包含以下五个演练:

  1. 演练:展示 RIA Services

  2. 演练:创建 RIA Services 解决方案

  3. 演练:使用“Silverlight 业务应用程序”模板

  4. 演练:创建 RIA Services 类库

  5. 演练:本地化业务应用程序

本节还包含以下三个主题:

  1. 如何:添加或移除 RIA Services 链接,介绍如何管理 RIA Services 链接。

  2. 使用域服务向导,介绍对话框中的 UI 元素。

  3. Debugging a RIA Services Solution,针对创建 RIA Services 解决方案时遇到的问题,提供一些解决问题的指导。

在 RIA Services 文档的这一节中提供的演练除了 WCF RIA Services 和 WCF RIA Services 工具包外,还要求正确安装和配置几个必备程序,如 Visual Studio 2010 以及 Silverlight Runtime 和 SDK。它们还要求安装和配置具有高级服务的 SQL Server 2008 R2 Express 以及安装 AdventureWorks OLTP 和 LT 数据库。

WCF RIA Services 的必备条件节点中的主题提供有关如何满足这些前提条件的详细说明。请按照那里提供的说明操作,以确保在执行本节中的 RIA Services 演练时尽可能少地遇到问题。

RIA Services 链接

在所有的 RIA Services 解决方案中,在 Silverlight 项目及其关联的中间层项目之间都存在一个链接(通称为 RIA Services 链接)。RIA Services 链接是一种特殊形式的项目到项目引用,可简化从中间层中的代码生成表示层代码的过程。通过在创建新的 Silverlight 项目时选中**“启用 WCF RIA Services”**复选框,可以创建 RIA Services 链接。还可以在项目属性中为现有项目创建 RIA Services 链接。在某些情况下,您会在应用程序项目之间创建 RIA Services 链接,而在其他情况下,会在类库项目之间创建链接,以下各节将介绍这两种链接。

在项目之间存在链接时,Silverlight 项目接收代理类,这些代理类使该项目能够访问中间层代码。无法指定只将中间层的某些部分应用于 Silverlight 项目。下面的规则适用于对 RIA Services 链接的使用:

  • 在 Silverlight 客户端项目中定义链接。

  • 该链接始终从 Silverlight 客户端项目指向 .NET 服务器项目或类库。

  • 每个 Silverlight 客户端项目只能有一个链接。

  • 该链接不能指向其他 Silverlight 客户端项目。

  • 多个 Silverlight 客户端项目可以指向同一个服务器项目或类库。

  • Silverlight 应用程序不能直接链接到类库项目。

有关管理 RIA Services 链接的更多信息,请参见本节中的如何:添加或移除 RIA Services 链接

默认解决方案结构

在默认的解决方案结构中,RIA Services 创建单个客户端项目和(单个)服务器项目。在使用**“Silverlight 应用程序”模板创建一个新项目时,如果选中“启用 WCF RIA Services”**框,将创建具有此默认结构的解决方案。然后,在这两个项目之间已存在一个 RIA Services 链接。在您生成解决方案时,将为域服务和共享代码生成客户端代码。下图显示了默认的解决方案结构。

默认项目结构

该默认解决方案结构可为您带来很大方便,因为在生成该解决方案后,添加到服务器项目的所有域服务类型和共享代码都可自动为 Silverlight 客户端项目所用。此外,您添加到服务器项目的共享代码在客户端项目中是可见的。当您的服务器项目中没有太多域服务并且无需在许多不同的 Silverlight 应用程序之间重复使用业务逻辑时,十分适合使用此结构。

在具有默认结构的解决方案中,您可以添加多个具有指向服务器项目的 RIA Services 链接的 Silverlight 应用程序。但是,默认结构存在一些限制。为每个 Silverlight 客户端生成的代码可从服务器项目访问所有中间层代码。例如,如果您有三个链接到一个服务器项目的 Silverlight 应用程序,并且想添加将只由其中一个 Silverlight 应用程序使用的域服务,但所有这三个客户端应用程序都将具有为该域服务生成的域上下文并且将能够访问该域服务。

有关在 Visual Studio 2010 中创建 RIA Services 解决方案的更多信息,请参见演练:创建 RIA Services 解决方案。有关为客户端项目生成的代码的更多信息,请参见客户端代码生成

Silverlight 业务应用程序模板

RIA Services 还提供**“Silverlight 业务应用程序”模板。您能够以该模板为起点,很方便地为客户端生成使用 Silverlight 的业务应用程序。该模板在 Silverlight 导航应用程序的基础上构建并且使用 RIA Services 来支持身份验证和用户注册。在您使用“Silverlight 业务应用程序”模板创建项目时,RIA Services 将创建具有默认结构的解决方案。“Silverlight 业务应用程序”**模板会自动添加以下功能:

  • 登录窗口

  • 注册窗口

  • Silverlight 导航

业务应用程序的默认身份验证模式是窗体身份验证。若要使用 Windows 身份验证,只需在 Web.config 文件中更改身份验证元素(例如 <authentication mode="Windows"/>)的值,并且更改生成的 WebContext 类的 Authentication 属性值。业务应用程序模板会自动包含代码,以支持窗体身份验证或 Windows 身份验证。有关更多信息,请参见演练:使用“Silverlight 业务应用程序”模板主题。

该服务器项目的 Services 文件夹包含公开用户注册和用户身份验证的域服务。用户注册服务使用 ASP.NET 成员资格提供程序来创建新用户。在服务器项目中,一个名为 Models 的文件夹将包含用于为用户数据和注册数据定义属性的类。您可以向这些类添加属性,以便为您的应用程序自定义用户数据。

在客户端项目中,业务应用程序包含用于简化表示层开发的代码。Libs 文件夹和 Controls 文件夹包含在该模板中使用的程序集和控件。Login 文件夹(位于 Views 文件夹中)包含身份验证和用户注册控件。在项目中将自动启用这些控件。Resources 文件夹(位于 Assets 文件夹中)包含项目中文本的资源字符串。在您向应用程序添加文本时,可以将它们添加到应用程序字符串文件中。

有关更多信息,请参见演练:使用“Silverlight 业务应用程序”模板

支持 N 层类库组件

RIA Services 提供了**“WCF RIA Services 类库”**项目类型以便支持通过库共享代码。通过使用类库,您可以将业务逻辑包装为可重用的 N 层类库组件。

下图显示了使用 RIA Services 类库的一种解决方案结构。

类库结构

在该图中,请注意应用程序项目之间不存在 RIA Services 链接。而在类库项目之间存在该链接。您可以在您的应用程序中使用任何数目的类库,并且可以在任何数目的应用程序中重复使用这些类库。

使用 RIA Services 类库提供了以下好处:

  • 可以开发单个数据域的服务器和客户端部分,并将其包装为单个组件。此组件可以在多个应用程序中重复使用。

  • 客户端代理代码生成和源代码共享只在一个位置发生。此位置位于组件的各层之间,而不是在每个 Silverlight 应用程序中。

  • 单个 Web 应用程序项目中的多个 Silverlight 应用程序可以仅引用它们需要的类库。因此,Silverlight 客户端不必看到中间层公开的所有业务逻辑。

对于 RIA Services 类库,您可以生成一个灵活的解决方案结构,该结构仅提供应用程序所需的组件。下图显示了一个使用多个 RIA Services 类库的解决方案结构。

类库结构

Important 注意:
如果向“Silverlight 业务应用程序”项目添加一个类库项目,则不能在该类库中向该服务器项目添加身份验证服务。“Silverlight 业务应用程序”模板中的用户对象对于该类库而言是不可访问的。

有关更多信息,请参见演练:创建 RIA Services 类库