WCF Ria Service 理解

WCF Ria Service三个常用的核心类关系:

DomainService与LinqtoEntitiesDomainService /LinqToSqlDomainService关系制图如下:

DomainService类是领域服务的基类-域名服务是用WCF Service来封装一个应用程序的业务逻辑. 一旦你实例化一个Domain Service. Domain Service会对外暴露出与这个Domain Service相关l连的业务逻辑层 访问代理proxy.

LinqToEntitiesDomainService类:对领域服务提供了一个利用Linq操作实体的基类. 同理而言LinqToSqlDomainService同样一个操作领域服务的基类. 只不过方式变成了Linq to SQL.

一个域名服务类必须注明EnableClientAccessAttribute属性,以使服务对给客户端项目时可见的. 如下创建一个实例来说明如何使用Ria Service在Silverlight访问数据.

A:创建一个Silverlight Application.

B:在创建项目时指定Silverlight版本为4.0 注意必须启用RIA Service.

Silverlight 添加RIa Service后空白解决方案.

D:如何通过RIA Service在Silverlight访问数据. 基本思路如下;

E:基于解决方案中服务器端Silverlight2.Web添加一个数据实体类:ADO.NET Entity Data Model.

出现一个添加向导 选择实体类数据源-来自数据库:

下一步. 建立一个数据库有效连接. 下一步 选择指定数据库下实体数据对应的表:

ok即完成了数据实体的创建.需要注意实体所在命名空间支持自定义. 即将在Silverlight2客户端程序引用它. 也可以选中该文件在属性中找到CurrentNameSpace直接修改该文件所在命名空间.

F:在解决方案服务器端Silverlight2.Web中添加领域服务Domain Service文件:

 

 出现创建向导.如下:

 发现在向导中Domain Service Class 要选择实体类是空. 注意在创建Ria Service中每做一次修改都需要Ctra +Shit+B快捷键重写生成一下解决方案.

 

Enable Client Access指定在Silverlight客户端可编辑的 选中实体类中Customer表.ok 生成一个Domain Service. 这时解决方案自动生成一个DomainService1.CS文件.

该文件特点如下:

(1)该 CustomerDomainService 继承于抽象的LinqToEntitiesDomainService类 。这个基类是自动使用的域名服务公开一个与之像关联ADO.NET实体数据类Customer.

(2)CustomerDomainService 类是标有EnableClientAccessAttribute 属性,以表明它是可见的客户端层Silverlight2项目中是可见的.

(3)一个没有任何过滤和排序操作的GetCustomer()方法获得全部Customer表数据. 同理而言在这个类也可以定义增删改查相应数据操作方法.

G:Silverlight客户端项目Silverlight2中引用.

重写生成以下解决方案,在Silverlight客户端项目Silverlight2中查看所有文件.发现在Generated_Code文件下多了一个SilverlightApplication2.Web.g.CS代码文件

 

 打开该代码文件. 其特点如下:

(1)WebContext 继承与类WebContextBase 生成的一个类

(2) CustomerDomainContext 继承于类 DomainContext。这个类有一个方法名为 GetCustomersQuery 相对应的查询方法在域中创建服务

(3) Customer 从派生类 Entity 生成的类是由Domain Service暴露公开的实体。该客户端 的Customer 实体类通服务器上Customer实体类向对应匹配/

G:在Silverlight中获得对应数据:

在MainPage.XAMl中必须导入两个命名空间: 一个是定义数据实体所在命名空间[即在创建ADO.NET Entity指定空间] 另外一个是Domain Service所在命名空间[默认为项目名称].

在MainPage放入一个DataGrid来测试是否获得数据. 后台编码如下:

代码
复制代码
 1 public partial class MainPage : UserControl
 2     {
 3         private CustomerDomainContext _customerContext = new CustomerDomainContext();
 4 
 5         public MainPage()
 6         {
 7             InitializeComponent();
 8             
 9             LoadOperation<Customer> loadOp = this._customerContext.Load(this._customerContext.GetCustomersQuery());
10             CustomerGrid.ItemsSource = loadOp.Entities;
11         }
12     }
13 
复制代码

 

测试结果:

一个完整通过Ria Service获取数据库MSSQL中数据过程如上.

 

http://www.cnblogs.com/chenkai/archive/2010/05/05/1728212.html

 

上面只是简单的如何创建一个RIA Service解决方案. 并通过RIA Service在数据库MSSQL获得数据到Silverlight客户端. 一个默认的解决方案. Silverlight客户端通过Web Application来承载显示的. 但当在服务器端添加RIA Service 数据实体和Domain Service后. 在Domain Service类中添加一个 EnableClientAccessAttribute属性使其在客户端可见的.但是Ria Service 如何同Sl客户端进行关联的? 在N-Trie【N层】 如何添加和删除一个 Ria Service Link关联?

 

通常情况下,当你创建了一个RIA Service Application后. RIA Service会与Server Project 和Client Project 之间建立一类类似桥接的关联, 这种关系即成为RIa Service Link.详细制图如下:这点也充分比较了Sl 2.0 和3.0版本后4.0版本加强RIA Service意图: 通过RIA Service把Server Project和Client Project关联起来类似两层直接关联..

你也许可能会问既然RIa Service可以关联, 那么可以添加多个关联吗? 类似一个Server Project中Domain Service可以关联多个Client Project如下:

这个问题先放在这, 来看如何添加和删除一个RIA Service Link.

A:添加和删除Ria Service link 这种操作一般会出现在N-Trie[N层]架构中或是用户自定义Server Client实现上比较常用.添加一个新的Ria Service Link,查看Server Project属性.

B:查看属性对话框选择Silverlight Application 分栏.:

如上可以看到已经存在一个Client Project:CreateRiaProjectDemo.现在添加一个新的Client Project.点击下面Add按钮:

可以看到可以创建一个新的或是添加一个已经存在Silverlight Project【Client】,注意选中的Enable Wcf Ria Services .我们选择新建一个Silverlight Project主要为了区别,命名默认SilverlightProject1.在来回过头来看看解决方案结构变化:

 

解决方案中发生两处变化,多了一个Silverlight项目, 查看全部文件在Generated_Code文件默认Ria Service关联是CreateRiaProjectDemo.Web【Server Client】.同时在承载.Web项目中多了两个测试关于SilverlightProject1项目默认模板页.aspx和.html,在回过头看看我们当初一个Server Client可以通过Ria Service关联多个Client Project的设想是完全成立的. 在SilverlightProject1访问数据方式和CreateRiaProjectDemo是一样.当然也可以在新建Silverlight1查看Ria Service Link所对应的项目. 解决方案属性 Silverlight分栏中:

B:同样要删除一个关联就很简单了.在属性对话框选择Silverlight Application 分栏中选中删除即可:

如何添加删除一个Ria Service Link 具体操作如上. 当然Ria Service Link也可以在Silverlight Client项目中查看并删除:

当在项目属性中Silverlight分栏中找到它通过Ria Service Link所关联的项目时, 可以直接通过设定为No Project Set即删除Ria Service Link关联关系.

http://www.cnblogs.com/chenkai/archive/2010/05/06/1728700.html

posted @ 2012-06-21 12:02  路灯下的诗人  阅读(782)  评论(0编辑  收藏  举报