天天看点

Win10开发:一个简单的MobileService

一、新增MobileService项目

1、新建一个Win10项目,命名为MobileServiceDemo。在解决方案下,新增一个MobileService项目。

Win10开发:一个简单的MobileService

2、为了方便调试,修改下解决方案的属性,将启动项目设置为“当前选定内容”

Win10开发:一个简单的MobileService

3、测试API

运行这个MobileService项目,VS会自动打开本地的IIS Server来host当前的客户端项目,运行结果如图。这个http://localhost:1827/ 就是访问当前Service的入口,1827是端口号,后续需要用到。 

Win10开发:一个简单的MobileService

点击try it out,可以看到当前这个Mobile Service支持的API列表

Win10开发:一个简单的MobileService

接着测试一下API,

点击“POST tables/TodoItem”,然后点击“try this out”,在Sample中修改要插入的项,最后点击Send将数据插入数据库。操作成功会返回一个状态码

Win10开发:一个简单的MobileService
Win10开发:一个简单的MobileService
Win10开发:一个简单的MobileService

回到上一页面,选择“GET tables/TodoItem”,同样点击“try this out”,然后send,就可以查看表格TodoItem中的数据项,包括前面插入的

Win10开发:一个简单的MobileService

4、查看TodoItem表

在VS中,在菜单中选择“视图”->“服务器资源管理器”,在“服务器资源管理器”的面板中选择“数据连接”就可以找到我们的TodoItem表(还没弄懂为什么是TodoItems),其中text和complete字段是我们TodoItem类中定义的,其他是EntityData增加的,这样我们就查看和更新表格定义和数据了。

Win10开发:一个简单的MobileService
Win10开发:一个简单的MobileService

二、MobileService项目结构简要分析

观察这个项目的目录结果,如果做过ASP.NET MVC 的开发,会发现整个项目结果和ASP.NET MVC十分相似,实际上这就是一个简化版的MVC项目。下面对几个文件做简要说明。因为我也是初学,所以只能做简要分析,需要深入解析还请查阅其他资料。

1、DataObjects文件夹下是TodoItem类,继承了EntityData,在EntityData按F12导航到定义,可以看到许多属性,方便后续的工程开发,关于EntityData这里不做太多阐述,因为我也不是太懂23333...

public class TodoItem : EntityData
    {
        public string Text { get; set; }

        public bool Complete { get; set; }
    }
           

2、Controllers下是TodoItemController类,继承了TableController<TodoItem>,传入的TodoItem表示当前这个Controller是操作的TodoItem表。在初始化函数Initialize中,new了一个EntityDomainManager,这个类的作用是为了更好的扩展性,使项目支持不同的DataSource,如sqlDatabase、Storage、Table、Blob、Mongodb等

对于各种Custom API的实现,都可以在当前文件夹下新增Controller来实现 

三、发布

如果对MobileService项目的操作已经完成,我们就可以将这个项目Publish到微软Azure上。(当然你要有一个Azure账号)

这里做个说明,如果穷屌丝没有Azure账号怎么办?两种办法,一直是找微软中国的Azure版本,不知道那个世纪互联运营的一元试用还有没有;另一种就是暂时不用远端的Azure,用本地的“Azure”,实际上就是不做这个发布的操作,直接host在本地。文章后面的Demo部分会有讲解。别误会,我也是穷屌丝,只不过我有微软送的MSDN订阅,所以才有Azure账户的...

1、在项目名称上右键选择“发布”,选择发布目标。如果选择导入,就要导入一个跟你的Azure账号对应的配置文件,这个可以在Azure的Portal面板中找到。具体就是找到你要更新的MobileService,然后进入仪表盘,就可以找到“下载发布配置文件”的操作。

选择“Microsoft Azure移动服务”,就可以直接在Azure上新增或更新移动服务。如果在列表中选择一项,那做的就是更新操作,也可以新建,新建的操作与在Azure的Portal上操作基本一样。

Win10开发:一个简单的MobileService
Win10开发:一个简单的MobileService
Win10开发:一个简单的MobileService

然后后续的步骤都比较简单,有些项如果不熟悉的可以保持默认。在连接标签下的Destination URL就是之后访问这个Service的URL

Win10开发:一个简单的MobileService

发布成功后,访问这个URL,再次选择try it out,就会要求你输入相应的账户密码,只要输入密码就可以登陆了。密钥可以Azure的Portal面板中对应移动服务的“管理密钥”下查看

Win10开发:一个简单的MobileService

如果要做远程调试,可以通过如下操作

在“服务器资源管理器”面板中找到对应的移动服务,右键选择“附加调试程序”就可以。忘了一点!前面发布的时候必须选择Debug版本才能支持远程调试。另外,远程调试好像特别的卡,做好心理准备。

Win10开发:一个简单的MobileService
Win10开发:一个简单的MobileService

四、Win10 Demo

既然是一个MobileService,就应该通过客户端对数据进行管理和操作,而不是在Web中操作,所以前面的部分都可以算是一个准备工作吧。

下面来讲解如何在Win10 应用中操作这些数据。

在第一步中我们已经建立了一个MobileServiceDemo的Win10项目,现在就来修改这个项目。

1、在项目名称上右键选择“管理Nuget程序包”,搜索“WindowsAzure.MobileServices”然后安装。

2、打开App.xaml.cs文件,新增一个MobileServiceClient类

如果你要连接的是本地的MobileService,则添加下面的代码。这里的1827就是前面提到的端口号。提示:如果做的是本地操作,记得把MobileService服务运行起来。

public static MobileServiceClient MobileService = new MobileServiceClient("http://localhost:1827");
           

如果你要连接的是远端Azure服务器上的,就新增下面的代码。这里的****就是管理访问移动服务需要的密钥

public static MobileServiceClient MobileService = new MobileServiceClient("https://mspmonthreport.azure-mobile.net/","********************");
           

3、新增TodoItem类

public class TodoItem
    {
        public string Id { get; set; }

        [JsonProperty(PropertyName = "text")]
        public string Text { get; set; }

        [JsonProperty(PropertyName = "complete")]
        public bool Complete { get; set; }
    }
           

4、修改MainPage.xaml页面,新增一个TextBox和一个Button

<StackPanel>
        <TextBox x:Name="txtVal"/>
        <Button Content="新增" Click="btnAdd_Click"/>
    </StackPanel>
           

5、新增btnAdd_Click事件

private async void btnAdd_Click(object sender, RoutedEventArgs e)
        {
            var item = new TodoItem { Text = txtVal.Text };
            await InsertItem(item);
        }

        private async Task InsertItem(TodoItem todoItem)
        {
            await todoTable.InsertAsync(todoItem);
        }
           

其中todoTable是获取TodoItem表

private IMobileServiceTable<TodoItem> todoTable = App.MobileService.GetTable<TodoItem>();
           

6、运行项目,就可以实现数据的插入了。当然这里没有做数据的校验和其他更复杂的增删改查操作。但是操作都是类似,这里不做更详细的讲解。

源码下载:https://github.com/hebecherish/MobileServiceDemo

继续阅读