现在开始搭建服务器和手机端基本框架
/**************************************************************************
注意:代码在即将开始的第三章,会有所变动
为了进行真机调试,请将数据库连接权限自定义一个账户,不要使用电脑系统权限进行操作,
ADO.NET数据模型连接语句也为之前自定义的账户,并且将ASP.NET应用程序项目部署到IIS服务器,
即可进行真机 局域网访问。
***************************************************************************/
一.服务器端
1.打开VS2010 新建ASP.NET WEB应用程序
2.添加一个新的ADO.NET 数据实体模型,选择从数据库生成模型
3.添加新建项-WCF数据服务,这样就可以通过实体模型和REST终点来对数据进行访问
修改FitnessTrackerPlusDataService 中的一端代码,让客户端对所有实体拥有读写权限
1 //数据愿<>为 数据实体名+Entities
2 public class FitnessTrackerPlusDataService : DataService<FitnessTrackerPlusEntities>
3 {
4 // 仅调用此方法一次以初始化涉及服务范围的策略。
5 public static void InitializeService(DataServiceConfiguration config)
6 {
7 // TODO: 设置规则以指明哪些实体集和服务操作是可见的、可更新的,等等。
8 // 示例:
9 // config.SetEntitySetAccessRule("MyEntityset", EntitySetRights.AllRead);
10 // config.SetServiceOperationAccessRule("MyServiceOperation", ServiceOperationRights.All);
11 //访问规则
12 config.SetEntitySetAccessRule("*",EntitySetRights.All);
13 config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
14
15 }
16 }
4.生成一组代理类
我本机WCF服务地址为http://localhost:4096/FitnessTrackerPlusDataService.svc
.NET有一个工具可以自动生成代理类,名称为DataSvcUtil,在WIN7 32为系统下,路径为C:\Windows\Microsoft.NET\Framework\v4.0.30319
现在我们开始生成一组代理类,以管理员权限运行命令提示工具
输入以下指令(注意此命令不包含换行符和空格):
"%windir%\Microsoft.NET\Framework\v4.0.30319\DataSvcUtil.exe" /dataservicecollection
/version:2.0 /language:CSharp /out:FitnessTrackerPlusData.cs
/uri:http://localhost:4096/FitnessTrackerPlusDataService.svc
关于此工具详细的用法请查看MSDN文档
WCF 数据服务客户端实用工具 (DataSvcUtil.exe)
http://technet.microsoft.com/zh-cn/exchange/ee383989(v=VS.90)
如何:手动生成客户端数据服务类(WCF 数据服务)
http://technet.microsoft.com/zh-cn/exchange/dd756369(v=vs.90)
/*************************
IIS服务端部署成功,访问成功示例(返回XML格式数据)
**************************/
二.手机端
1.新建一个WP7程序
2.选择 添加现有项,将我们之前用工具生成的FitnessTrackerPlusData.cs 类添加到程序中
3.添加服务引用 地址为http://localhost:4096/FitnessTrackerPlusDataService.svc
4.示例 简单的查询
5.前台代码-进行数据绑定
1 <!--ContentPanel - 在此处放置其他内容-->
2 <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
3 <ListBox x:Name="list">
4 <ListBox.ItemTemplate>
5 <DataTemplate>
6 <TextBlock Text="{Binding name}"></TextBlock>
7 </DataTemplate>
8 </ListBox.ItemTemplate>
9 </ListBox>
10 <Button Content="查询" Width="200" Margin="128,504,128,20" Click="Button_Click"></Button>
11 </Grid>
6.后台代码
1 public partial class MainPage : PhoneApplicationPage
2 {
3 //数据类型
4 FitnessTrackerPlusEntities entites = new FitnessTrackerPlusEntities(new Uri("http://localhost:4096/FitnessTrackerPlusDataService.svc"));
5 // 构造函数
6 public MainPage()
7 {
8 InitializeComponent();
9 }
10
11 private void Button_Click(object sender, RoutedEventArgs e)
12 {
13 //查询食物为一杯数据
14 var query = (from f in entites.foods
15 where f.serving_size == "1 cup"
16 select f) as DataServiceQuery<foods>;
17 query.BeginExecute(foods_CallBack, query);
18
19
20
21 }
22 private void foods_CallBack(IAsyncResult result)
23 {
24 var query = result.AsyncState as DataServiceQuery<foods>;
25 var foodss = query.EndExecute(result).ToArray();
26 //因为在WP7中 UI为主线程,我们现在是对UI操作,如果不开异步,会导致线程阻塞
27 this.Dispatcher.BeginInvoke(() => { list.ItemsSource = foodss; });
28 }
29 }
7.客户端引用的WCF数据服务预览
8.执行效果
本章源代码:
http://dl.dbank.com/c0xb4p5sax
修改后IIS代码:
http://dl.dbank.com/c0t3bgpv7d