上节大概介绍了一下 WCF RIA 服务, 这次介绍下整个解决方案的结构。
当创建应用程序时,WCF RIA服务可以帮你建立满足各种各样情况的解决方案。例如只是在中间层访问很少domain services的Silverlight应用程序。更复杂的例子可能是几个Silverlight程序都连接到一个提供许多domain services的通用中间层。本节就介绍几种构建RIA服务解决方案的方式。
RIA 服务连接
在所有的RIA Services方案中,一个连接(就是RIA服务连接)存在于中间层项目和表示层项目之间。一个RIA Services连接是一个项目对项目引用的特殊模式,它更便于从中间层的代码来生成表现层的代码。在创建解决方案时选择 Enable WCF RIA Services 选项 ,就可以建立RIA Services 连接了。你也可以在已有项目的属性中建立RIA Services link。有的时候建立的连接是在应用项目之间的,而有些时候是建立在类库项目之间的。
当在项目中存在link时,表示层将会收到中间层的所有代码。不能指定只有一部分的代码应用到表示层。下面的规则用于RIA Services Link:
- 在 Silverlight的客户端项目中定义link。
- link总是由Silverlight客户端指向.NET 服务端或类库。
- 一个Silverlight客户端只能有一个link。
- 这个link不能指向其他Sliverlight客户端。
- 多个 Silverlight客户端可以指向同一个服务端或类库。
- 一个Silverlight应用程序不能连接到一个类库项目。
默认的解决方案结构
在默认的解决方案结构中,RIA Services创建一个单一的客户端项目和一个服务端项目。当使用Silverlight Application模板并勾选 Enable WCF RIA Services来创建项目时,就建立了一个默认的结构。一个RIA Services Link就已经在两个项目中存在了。当你生成解决方案时,将生成相对Domain Services和共享代码的客户端代码。下面的图展示了默认结构:
这个默认的结构是很方便的,因为所有的domain services类型和共享代码都在生成解决方案后自动添加到服务端和客户端。而且添加在服务端的共享代码,在客户端也是可见的。当你没有很多的 domain services在服务端并且你也不必在很多不同的SL应用程序中重用商业逻辑时,默认的结构就已经可以很好的工作了。
在默认的解决方案结构中,你可以给服务端项目添加更多的具有RIA Services Link的SL应用程序。然而,默认的结构也存在局限性。对每一个SL客户端生成的代码包含所有来自服务端的中间层代码。例如,如果你有3个连接到一个服务端的SL应用程序,并且你想添加一个只能被其中一个SL应用程序使用的domain service,那么这3个客户端应用程序都将拥有为这个domain service生成的domain上下文并且可以访问这个domain service.
Silverlight Business Application template
RIA Services还提供了一个 Silverlight Business Application 模板。这个模板对建立一个SL商业应用程序提供了一个方便的出发点。这个模板建立在SL导航应用程序上,并用RIA Services来支持身份认证和用户注册。当用SL商业应用程序模板创建项目时,RIA Services建立默认的结构,并自动添加下面的特性:
- 登录窗口
- 注册窗口
- SL导航
支持N层类库组件(Class Library Components)
RIA Services提供WCF RIA Services Class Library 项目类型来支持库中共享代码。通过类库,你把商业逻辑打包在N层类库组件里。下图展示使用RIA Services类库的解决方案结构:
在上图中,注意RIA Services Links并没存在于应用程序之中。相反,存在于类库项目中。你可以在你的应用程序中使用任意多的类库,并可以在任意的应用程序中重用这些类库。
使用RIA Services 类库有如下好处:
- 服务端和一个单一数据域的客户端可以被作为一个单一的组件来开发和打包。这个组件可以在多个应用程序用重用。
- 客户端的代理代码生成和源码共享都发生在一个位置。这个位置在每个组件的层中而不在每个SL应用程序中。
- 在一个单一的Web应用程序中的多个SL应用可以指向它们所需的那个类库。每个SL应用程序不用再不得不看到中间层所公开的商业逻辑。
用RIA Services 类库,你可以仅提供应用程序所需的组件来建立灵活的解决方案结构。下图展示了一个应用多个RIA Services类库的方案结构:
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/blackant2/archive/2010/04/08/5461238.aspx