Silverlight RIA Services Class Library类库使用1.
2010-05-06 18:49 chenkai 阅读(3051) 评论(12) 编辑 收藏 举报上午整理了silverlight business application商业模板的结构.这个模板我在Silverlight 2.0版本以前是没有见过. 微软是从Silverlight 3.0版本中添加进来. 当时发布正式版提出一个广告语叫"See the light", 在SL一个论坛上找到以前这个广告的宣传配图.
在以前微软SL宣传中使用另外一个"Silverlight up on your web"广告语 这口气 有点霸道吧. 做过MVC框架开发朋友应该都感觉到这和MVC显示层框架 有点像.页面比较干净. 出的样式也比较接近. 但对这个模板的结构 只做了初步了解. 这方面资料也很少. 转入正题Silverlight RIA Services Class Library类库使用.
A:Silverlight RIA Services Class Library类库
主要是可以创建可重复使用的中间层和表示层逻辑.但是它的创建比创建一个RIA Service 解决方案要麻烦一点. 当我们创建一个普通的Silverlight Application.如果启用Enable WCF RIA Service.这个选项, 就是通过Silverlight Client同Server Project 建立一个 Ria Service Link关联.而Silverlight RIA Services Class Library类库 恰恰分离这种默认Ria Service Link关联.把这种关系独立出来.大致如下下图:
B:创建Silverlight RIA Services Class Library类库
首先新建一个普通的Silverlight Application项目. 注意在建时 因为我们采用的Silverlight RIA Services Class Library来隔离RIa Service Link关系. 所以Enable WCF Ria Service 这个选项不选中即创建时不启用Ria SErvice.
建立完成后再解决方案中添加Silverlight RIA Services Class Library类库项目,完成解决方案项目结构:
在HROAServicelibDate文件夹下多了两个项目HROAServicelibDate和HROAServicelibDate.Web. 既然是通过类库来创建Ris Service Link关联就需要添加项目引用. 引用顺序和规则:
从上图就能看出Ria Service Link关联关系建立, 在引用上可以看出是相对应的:
TestCreateServiceLib.Web引用类库中HROAServicelibDate.Web.
TestCreateServiceLib引用类库中HROAServiceDate.
Ria Service Link关联关系建立完成 重写生成解决方案. 当我们把这层关系独立出来后.那么原来的编码习惯也随着改变. 以前把数据访问的Data Entity和Domain Service都存放在Server Client即TestCreateServiceLib.Web项目中. 现在则可以放在类库中HROAServicelibDate.Web项目中.现在HROAServicelibDate.Web中添加一个WorkBill实体数据访问[一个实体和一个Domain Service].重写编译解决方案 来查看所有文件:
原来存放Generated_Code文件夹由原来的默认方式TestCreateServiceLib项目中转移到HROAServiceDate中.由此你应该能看出Generated_Code文件夹转移是随着Ria Service Link关系而同步变动.虽然没有代码是为TestCreateServiceLib项目产生,但在HROAServiceDate和TestCreateServiceLib项目之间建立引用关系.依然可以使用TestCreateServiceLib生成的代码.
C:如上以类库方式来访问数据:
先在TestCreateServiceLib添加 System.ServiceModel.DomainServices.Client 引用[默认是未添加的].默认在SDK目录下: [Program Files]\Microsoft SDKs\RIA Services\v1.0\Libraries\Silverlight下可以找到.
在MainPage.Xaml文件拖入一个DataGrid控件来测试访问数据.布局如下:
2 <sdk:DataGrid AutoGenerateColumns="False" Height="212" HorizontalAlignment="Left" Margin="51,78,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="522">
3 <sdk:DataGrid.Columns>
4 <sdk:DataGridTextColumn Header="Code" Binding="{Binding Code}"></sdk:DataGridTextColumn>
5 <sdk:DataGridTextColumn Header="创建时间" Binding="{Binding CreateDate}"></sdk:DataGridTextColumn>
6 </sdk:DataGrid.Columns>
7 </sdk:DataGrid>
8 </Grid>
后端代码:
2 using HROAServicelibDate.Web;//注意引用时Ria Service 类库中Web项目 而非TestCreateServiceLib.Web
3 using System.ServiceModel.DomainServices.Client;
4
5 namespace TestCreateServiceLib
6 {
7 public partial class MainPage : UserControl
8 {
9 //声明
10 private HROAServicelibDate.Web.HROAModelDomainContext getcontent = new HROAModelDomainContext();
11 public MainPage()
12 {
13 InitializeComponent();
14 //获得数据并绑定
15 LoadOperation<HROAServicelibDate.Web.ProductOrder> getproductlist = this.getcontent.Load(this.getcontent.GetProductOrderQuery());
16 this.dataGrid1.ItemsSource = getproductlist.Entities;
17 }
18 }
19 }
这个如果重写生成一下直接运行会提示一个GetProductOrderQuery()这个方法设计到对象GetProductORder Not Found找不到的异常:
这是因为通过承载Web运行Silverlight读取Domain Service 数据库链接信息在TestCreateServiceLib.Web项目Web.Config中不存在. 所需要在HROAServicelibDate.Web项目App.Config文件把实体对应和数据库链接配置信息拷贝到Web.Config中. 拷贝内容为.<connectionStrings>, <system.serviceModel>,和 <httpModules> 三个配置节点元素. 放到Web.Config.再次运行发现:
获取数据成功.