part1: 如何使用RIA Services
part2: RIA Services更新和验证
part3:RIA Services数据新增
part4:皮肤的更改
part5:报表的展示
part6:Endpoint的设置
part7:如何使用RIA Service Class Library
part8:url重写和界面友好
这一部分我想了想准备写点在Silverlight中使用MVVM设计模式以RIA Service作为数据提供源,但是这两天就结着一个项目,所以估计得5.1才能和大家分享了。不管怎么说这里我会让你更加深入的了解Domain Serivce。
第一节:以JSON,WCF和oData的形式展示RIA Service的数据:
我这个是参考了网上老外的一部分资料,按照他的思路去试着做的。WCF本身就有很多验证方式和安全机制。RIA Serivce的安全机制更加强大,而且本身对update数据时的验证也让人觉得它真的是很不错的 。
a. 以oData形式导出数据。至于oData如果你不了解可以来这里看看http://www.odata.org/
如果你留心观察的话会注意到创建Domain Service时会有个oData选项,如下图:
你只需要把checkbox选上然后继续你的操作,创建好Domain Service后你就会发现在配置文件多了个endpoint而且格式是oData。
一般情况下生成的Service都会有属性:Query[default=true] ,如下面所示:
[Query(IsDefault = true)]
public IQueryable<Employee> GetEmployees()
{
return this.ObjectContext.Employees;
}
如果你生成的service默认没有,请手动加上。
如果来测试数据?
因为Domain Service最终也是WCF。所以最终访问这个service也是个.svc的文件。微软已经把url给封装好了,默认的形式是你当前的namespace+service名称。需要注意的是所有的’.’都必须换成’-’才能访问这个service,比如我目前的服务url为:
http://localhost:52878/RIAServiceAsJSONType-Web-EmployeeDomainService.svc/oData/
说明我的服务所在的namespace是RIAServiceAsJSONType.Web,而Domain Service的名字为EmployeeDomainService.当我访问上面的url时会得到如下的数据:
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
- <service xml:base="http://localhost:52878/Services/RIAServiceAsJSONType-Web-EmployeeDomainService.svc/OData/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app" xmlns="http://www.w3.org/2007/app">
- <workspace>
<atom:title>Default</atom:title>
- <collection href="EmployeeSet">
<atom:title>EmployeeSet</atom:title>
</collection>
</workspace>
</service>
EmployeeSet就是把Employee的数据封装为一个序列化的数据集,试着去看看它是啥样子:
是个Feed,你可以使用RSS reader,或者是Outlook等等来显示它的内容。我看到那个老外给介绍了Excel插件来显示它, PowerPivot.
你可以下载下来安装上试试。它是个很强的数据分析软件。
可以直接导入数据库,文件或者是reporting service等feeds。我们就用它来导出刚才的employee的数据。点击Form Data Feeds然后输入Url,就可以把数据导出到excel中了。
最终结果:
速度还行。你可以试试是否能够找到PowerPivot的接口,然后集成到Silverlight就可以实现导出数据到excel的功能了。
b. 设置WCF (SOAP) Service类型的endpoint.
首先你需要引用下面这个dll:
然后需要在web.config中添加如下的endpoint。
<add name="Soap" type="Microsoft.ServiceModel.DomainServices.Hosting.SoapXmlEndpointFactory, Microsoft.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
然后直接按照传统的wcf Service来访问那个.svc,
下一步我就要使用这个WCF Service来作为Silverlight中一个DataGrid的数据源,
给RIAServiceAsJSONType这个project添加一个service reference,就是上面的那个WCF 的url.
接下来是在home.xaml页面添加一个DataGrid:
Xaml代码:
<Grid x:Name="LayoutRoot" Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="55" x:Name="HeaderRow"/>
<RowDefinition Height="*" x:Name="ContentRow"/>
<RowDefinition Height="20" x:Name="FooterRow"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock x:Name="txtHeader" Grid.Row="0" FontSize="18" Margin="6,6" Foreground="LightSteelBlue"
Text="Display WCF Service Employee Data --- Nic"/>
<Grid x:Name="ContentGrid" Grid.Row="1" Margin="5">
<Grid.RowDefinitions>
<RowDefinition Height=".6*" />
<RowDefinition Height=".4*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<data:DataGrid x:Name="dgOrders" Grid.Row="0" Grid.Column="1"
AutoGenerateColumns="True">
</data:DataGrid>
</Grid>
</Grid>
OK, 下面就更简单了,绑定数据,我们只是需要在页面加载时来把employee的数据绑定到datagrid上。
C#代码:
public MainPage()
{
InitializeComponent();
EmployeeDomainServiceSoapClient svc = new EmployeeDomainServiceSoapClient();
svc.GetEmployeesCompleted+=new EventHandler<GetEmployeesCompletedEventArgs>(svc_GetEmployeesCompleted);
svc.GetEmployeesAsync();
}
void svc_GetEmployeesCompleted(object sender, GetEmployeesCompletedEventArgs e)
{
if (e.Error == null)
{
this.dgOrders.ItemsSource = e.Result.RootResults;
}
else
{
MessageBox.Show("Service Error ,Please Check");
}
}
运行下看看结果:
当然了你可以使用Subchange方法来更新数据。。。
c. Json格式。。。待续。。呵呵