zoukankan      html  css  js  c++  java
  • windows phone调用 rest风格的 服务 GIS

    服务地址http://odata.netflix.com/v2/catalog/

    http://odata.netflix.com/catalog/ 

    http://odata.netflix.com/catalog/Titles

    http://developer.netflix.com/docs/oData_Catalog 此地址下有很多服务

    浏览器请求(返回的的数据格式如下)

    image

    (1)新建个windwos phone程序 RestTestnetfix

    (2 ) 在命令行里面 使用windows phone sdk 里面的 DataSvcUtil ,在本地生成代理类

    image

    F:\resttest\testone.cs是输出文件的 地址

    WSC9SR]7XG`6F~(8UYARRW4

    (3) 在wp7 程序里把testone。cs 加入到项目中

    (4) 添加System.Data.Services.Client assembly

    (5) 修改mainpage.xaml 为一下

    <Grid x:Name="LayoutRoot" Background="Transparent"
    DataContext="{Binding}">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
        
            <!--TitlePanel contains the name of the application and
    page title-->
            <StackPanel x:Name="TitlePanel" Grid.Row="0"
    Margin="12,17,0,28">
                <TextBlock x:Name="ApplicationTitle" Text=
    "Ch4 Recipes" Style="{StaticResource
    PhoneTextNormalStyle}"/>
                <TextBlock x:Name="PageTitle" Text="Movie Titles"
    Margin="9,-7,0,0" Style="{StaticResource
    PhoneTextTitle1Style}"/>
            </StackPanel>
            <!--ContentPanel - place additional content here-->
            <Grid x:Name="ContentPanel" Margin="12,0,12,-13" Grid.Row="1">
                <ListBox x:Name ="lstTasks" Grid.Row="3" Grid.Column ="1">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <Grid>
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="*" />
                                    <RowDefinition Height="*" />
                                </Grid.RowDefinitions>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*" />
                                </Grid.ColumnDefinitions>
                                <TextBlock Grid.Row="0" TextWrapping="Wrap"
    Text="{Binding Name}" FontWeight="Bold"
    FontStretch="Expanded" Foreground="OrangeRed"/>
                            </Grid>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </Grid>
        </Grid>

    (6)添加引用

    using Netflix.Catalog.v2;

    using System.Data.Services.Client;

    (7) 在mainpage。t添加load 事件的相应函数

    (8)

    public MainPage_Loaded(object sender,RoutedEventArgs e)
    {

    Uri svcUri = new Uri(@"http://odata.netflix.com/v2/Catalog/");
              var query = "Titles";
              // create context
              Netflix.Catalog.v2.NetflixCatalog ctx = new
              Netflix.Catalog.v2.NetflixCatalog(svcUri);
              DataServiceCollection<Netflix.Catalog.v2.Title> rslts = new
              DataServiceCollection<Netflix.Catalog.v2.Title>(ctx);
              rslts.LoadAsync(new Uri(query, UriKind.Relative));
              lstTasks.ItemsSource = rslts;

    运行结果如下

    image反映有点慢需要等一分钟

    catalog 下面包含很多目录/

      var query = "Titles";

        rslts.LoadAsync(new Uri(query, UriKind.Relative));

    表示只加载 title 目录里面的东西

    打开浏览器 http://odata.netflix.com/v2/catalog/Titles,会发现

    image

    重新来看一下该怎么使用DataSvcUtil 生成的testone。cs 。

    image

    NetflixCatalog继承子dataserivicecontext,所以他是代理类,传入一个url 生成代理的上下文

    Netflix.Catalog.v2.NetflixCatalog ctx = new    Netflix.Catalog.v2.NetflixCatalog(svcUri);
               DataServiceCollection<Netflix.Catalog.v2.Title> rslts = new    DataServiceCollection<Netflix.Catalog.v2.Title>(ctx)

    DataServiceCollection<(Of <(T>)>) 类

    表示一个动态实体集合,在添加项、移除项或刷新列表时,此集合将提供通知。

    使用“添加服务引用”对话或带有 /binding 选项的 DataSvcUtil.exe 工具生成用户数据服务类时,返回集合的导航属性将生成为 DataServiceCollection<(Of <(T>)>) 实例。 当从此类属性获取 DataServiceCollection<(Of <(T>)>) 的实例时,LoadAsync 方法用于将相关实体从数据服务加载到集合中。

    因为 LoadAsync 方法是异步的,所以该方法在接收到对数据服务的响应之前返回。 必须处理 LoadCompleted 事件以访问包含有关加载操作结果信息的QueryOperationResponse<(Of <(T>)>)。 加载操作完成时,无论是否已处理LoadCompleted 事件,项都将被加载入该集合。

    在 UI 线程上,只能调用一次 LoadAsync 方法。 在引发 LoadCompleted 事件之前,此方法都不能再次调用。 无论查询是否成功,都将引发 LoadCompleted 时间。

    image

  • 相关阅读:
    认识Linux
    Java之安装环境
    Markdown学习
    使用cacti监控linux server的接口流量
    IDRAC安装dell服务器操作系统(linux or windows),用到生命周期管理器
    网络编程--练习题
    linux搭建ntp服务器-添加交换机客户端,windows客户端
    linux centos7搭建redis-5.0.5
    linux centos7搭建mysql-5.7.29
    对称加密与非对称加密
  • 原文地址:https://www.cnblogs.com/gisbeginner/p/2541842.html
Copyright © 2011-2022 走看看