Silverlight 4 + RIA Services之商业应用系列 6----Domain Service的数据格式和自定义方法

 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,WCFoData的形式展示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/

说明我的服务所在的namespaceRIAServiceAsJSONType.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 servicefeeds。我们就用它来导出刚才的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格式。。。待续。。呵呵

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值