服务地址http://odata.netflix.com/v2/catalog/
http://odata.netflix.com/catalog/
http://odata.netflix.com/catalog/Titles
http://developer.netflix.com/docs/oData_Catalog 此地址下有很多服务
浏览器请求(返回的的数据格式如下)
(1)新建个windwos phone程序 RestTestnetfix
(2 ) 在命令行里面 使用windows phone sdk 里面的 DataSvcUtil ,在本地生成代理类
F:\resttest\testone.cs是输出文件的 地址
(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;
}
运行结果如下
catalog 下面包含很多目录/
var query = "Titles";
rslts.LoadAsync(new Uri(query, UriKind.Relative));
表示只加载 title 目录里面的东西
打开浏览器 http://odata.netflix.com/v2/catalog/Titles,会发现
重新来看一下该怎么使用DataSvcUtil 生成的testone。cs 。
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 时间。