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

原文地址:https://www.cnblogs.com/gisbeginner/p/2541842.html