行動裝置的資料離線解決方案 Part 1

by Anita 8. 十月 2014 02:30

.NET Magazine國際中文電子雜誌
者:羅慧真
稿:張智凱
文章編號:N141015301
出刊日期:2014/10/8
開發工具:Visual Studio 2013
版本:Windows Runtime 1.1

現在真是一個便利的世代,手機、平板等行動裝置提供設備輕盈、軟體多樣化及便利的特色,再加上現在是個 WiFi 化的城市幾乎到哪裡都有可連結的網路,因此幾乎人人手上有手機、平板等行動裝置,街頭上的人們等車有它陪著、等人無聊時有它伴著…。

在行動裝置如此普及化的時代裡,有沒有想過與你企業的應用可以產生什麼關聯嗎?可以做的事實在很多,像是賣場可以提供產品速查、促銷通知、商品架位 … ,業務、行銷人員、餐廳外場工作人員,可以提供客戶查詢、訂單查詢、點餐系統 … 上次去某家連鎖餐廳吃飯看到點餐人員真的是使用手機幫客戶點餐,在醫療體系裡、在警察、警衛巡邏、快遞等行業應該也可以看到不少的應用 …

不過目前我們可以看到的行動 App 好像是遊戲、社群軟體居多,有許多企業也慢慢在跟進中 … 事實上企業的行動 App 比一般消費型App 有更大的挑戰,它可能會有隨時需要更新的資料,可能需要一個適合的身分驗證與授權的需求,更可能遇到網路離線的狀態。

要如何將各類型的資料與使用者的行動裝置連結起來呢? 這是一個好問題。

image

我們來看看Microsoft Window Azure 行動服務提出的解決方式:

  • 解決沒有網路時的窘境
    配合SQLite API離線存取,連線同步的機制
  • SQLite 作為本地儲存機制
    內建異動追蹤、衝突處理的功能
  • 認證與 Azure 的AD整合及跨平台的推送通知

Window Azure 行動服務可以做為資料提供的服務站台,可以連線時資料從服務網站下載並且將資料使用SQLite API存到本地,在離線狀態時使用SQLite中的資料查詢及異動,當有網路時可以在連上雲端使用同步機制將資料更新到雲端服務,SQLite 有內建異動追蹤、衝突處理的功能,在離線狀態的黑暗期資料產生的差異SQLite API 都可以抓出來處理。同時它也支援認證與 Azure 的AD整合及跨平台的推送通知。

無論如何,這裡有兩個選項提供離線資料的解決方案,一個是NoSQL、一個是SQLite。

NoSQL

NoSQL 沒有使用到任何資料庫引擎的功能,純在 WinRT 的API,像是HttpClient、File、Stream,序列化相關類別…,將Web 服務的資料下載之後透過序列化/反序列化將資料存到本地磁區。

SQLite

這是一個目前最流行的行動資料庫,它支援多種平台,像是iOS, Android, Python, Mono, Windows 等…。是一種內嵌式、in-process的檔案行資料庫引擎。同時具備小型,快速,可靠,與公共領域支援交易處理 ACID等特色。

那麼要如何使用Window Azure 行動服務呢?

首先進入Window Azure網頁並登入到行動服務的入口(http://azure.microsoft.com/zh-tw/,若沒有帳號可以申請免費試用一個月),新增一個行動服務,接著在以下的畫面中設定一個唯一的 URL 位置,並且在【資料庫】的下拉選項中選取一個既有的或建立新的資料庫,然後在【地區】的下拉選項中選取資料庫要放置在雲端伺服器的位置,接著在【後端】的下拉選項選擇使用 【.NET 】。

image

按下方的下一步箭頭按鈕,進到指定資料庫設定,指定一個唯一的資料庫名稱,指定資料庫所在的伺服器(選擇【既有的或是建立新的】),然後設定伺服器的登入帳號及密碼(請使用複雜性密碼),並指定伺服器儲存地區。

image

然後點按右下方的勾勾完成設定,此時雲端會根據需求開始建置資料庫伺服器及資料庫,請耐心等候,當它建置完成後你會看到如下的畫面。

image

下載行動服務的專案檔

完成資料庫設定之後,進入行動服務的項目中,在【開始使用】的畫面中下載服務的專案,有兩個選項【建立新的Windows 或 Windows Phone應用程式】,一個是【連線到現有的 Windows 或 Window Phone 應用程式】,我們選擇後者,展開之後會出現【下載】按鈕,按下後會開始下載專案的壓縮檔,解壓縮之後開啟 .csproj 的專案檔。

image

Web API 定義物件模型及Controller

這個下載的專案是一個 Web API 的專案,當這個專案開發完成時你會將它佈署到雲端(行動服務)。請使用Visual Studio 開啟這個下載的專案,在DataObjects 的資料夾中加入一個類別取名為 Student ,程式碼如下:

using Microsoft.WindowsAzure.Mobile.Service;

namespace Win309Service.DataObjects

{ // 定義資料表的結構

    public class Student : EntityData

    {

        public string FirstName { get; set; }

        public string LastName { get; set; }

    }

}

這的類別必須繼承EntityData ,並且定義預備用來作為資料表的結構,這個範例預備要建立一個Student的資料表,並且有兩個欄位分別是FirstName、LastName。完成類別的撰寫請建置專案。

接著為這個 Student類別建立一個Web API的控制器 (Controller),以提供外界對 Student資料表內容的新增、刪除、修改等維護功能。在 Controllers資料夾的位置按滑鼠右鍵選取【新增】à【控制器】,然後再出現的【新增Scaffold】視窗選取【Microsoft Azure 行動服務資料表控制器】並且按下方的【新增】。

image

接著出現【新增控制器】的畫面,在【模型類別】的下拉清單選取Student(若是清單未出現你要的類別,請確認寫完Student類別有沒有成功的完成建置),接著在【資料內容類別】的下拉清單選取 Context物件,在【控制器名稱】輸入 StudentController,按下【新增】即可完成 Controller 的建立。

image

完成之後會產生以下程式碼:

public class StudentController : TableController<Student>

{

    protected override void Initialize(HttpControllerContext controllerContext)

    {

        base.Initialize(controllerContext);

        Win309Context context = new Win309Context();

        DomainManager = new EntityDomainManager<Student>(context, Request, Services);

    }

    // GET tables/Student

    public IQueryable<Student> GetAllStudent()

    {

        return Query();

    }

    // GET tables/Student/48D68C86-6EA6-4C25-AA33-223FC9A27959

    public SingleResult<Student> GetStudent(string id)

    {

        return Lookup(id);

    }

    // PATCH tables/Student/48D68C86-6EA6-4C25-AA33-223FC9A27959

    public Task<Student> PatchStudent(string id, Delta<Student> patch)

    {

        return UpdateAsync(id, patch);

    }

    // POST tables/Student/48D68C86-6EA6-4C25-AA33-223FC9A27959

    public async Task<IHttpActionResult> PostStudent(Student item)

    {

        Student current = await InsertAsync(item);

        return CreatedAtRoute("Tables", new { id = current.Id }, current);

    }

    // DELETE tables/Student/48D68C86-6EA6-4C25-AA33-223FC9A27959

    public Task DeleteStudent(string id)

    {

        return DeleteAsync(id);

    }

}

此程式提供透過http的方式查詢Student資料表(GetAllStudent、GetStudent方法)、新增(PostStudent方法)、修改(PatchStudent方法)、刪除(DeleteStudent方法)。在Visual Studio按 F5 執行程式,它會打開一個測試網頁,點按【try it out】,在下一頁點按Get tables/Student的Hyper Link,轉到下一頁,點按上方的【try this out】,得到如下的結果:

image

測試程式會將資料以json格式輸出在body的位置,因為目前資料庫沒有資料故body區塊是空白。在我們第一次執行程式時,Entity Framework已經將我們的資料表建立完成了,可以使用【伺服器總管】查看,回到Visual Studio,開啟【伺服器總管】應該已經自動被連結在【資料連接】的項目中,展開便可看到Students資料表,它是根據前面所寫的Student類別所建立的。

image

API 會自動為另加Id、Version、CreatedAt、UpdatedAt 等欄位以作為資料的識別及更新版本的衝突處理。目前尚未填入任何資料所以資料表是空的。

image

Web API 行動服務及資料表已經建置完成,這是第一階段的任務。用戶端這裡打算使用Windows Store App及 Windows Phone Store App 來說明如何與 NoSQL、SQLite的應用。篇幅有限今天就在這裡打住,我將在下一篇說明NoSQL與Windows Phone Store App。

評論 (48) -

cours de theatre paris
cours de theatre paris United States
2017/9/30 上午 10:44:39 #

Muchos Gracias for your article.Really thank you!

回覆

can ho dic phoenix
can ho dic phoenix United States
2017/10/6 下午 11:48:59 #

Enjoyed every bit of your article post. Really Great.

回覆

buy hacklinks
buy hacklinks United States
2017/10/9 下午 01:43:33 #

I cannot thank you enough for the blog article.Really thank you! Fantastic.

回覆

leki na potencje
leki na potencje United States
2017/10/9 下午 03:21:02 #

Thanks-a-mundo for the article.Much thanks again. Much obliged.

回覆

Osimi sea view
Osimi sea view United States
2017/10/9 下午 05:37:50 #

A big thank you for your blog. Really Great.

回覆

solarmovie
solarmovie United States
2017/10/10 下午 07:26:04 #

Really enjoyed this blog.Much thanks again. Awesome.

回覆

Nathan Coombe
Nathan Coombe United States
2017/10/10 下午 09:32:33 #

Great, thanks for sharing this article post.Much thanks again. Really Great.

回覆

pirater un compte facebook
pirater un compte facebook United States
2017/10/10 下午 11:51:21 #

Very good blog article.Really looking forward to read more. Great.

回覆

Google new cheat hacklinks
Google new cheat hacklinks United States
2017/10/12 下午 08:16:09 #

Thanks for sharing, this is a fantastic post.Thanks Again. Much obliged.

回覆

omega xl review
omega xl review United States
2017/10/15 下午 07:41:24 #

I really enjoy the blog article.Thanks Again. Much obliged.

回覆

you can look here
you can look here United States
2017/10/17 下午 02:17:45 #

Thanks for sharing, this is a fantastic blog.Much thanks again. Keep writing.

回覆

sletrokor
sletrokor United States
2017/10/17 下午 07:49:56 #

Fantastic blog.Really looking forward to read more.

回覆

Osimi Tower
Osimi Tower United States
2017/10/19 上午 05:12:30 #

Great, thanks for sharing this blog post.Really looking forward to read more. Keep writing.

回覆

VigRx Plus
VigRx Plus United States
2017/10/19 上午 06:54:07 #

Very good article post.Much thanks again. Cool.

回覆

web
web United States
2017/10/19 下午 05:44:30 #

Really informative blog post.Really looking forward to read more. Keep writing.

回覆

pure slim 1000 review
pure slim 1000 review United States
2017/10/20 上午 03:15:23 #

I really like and appreciate your post.Thanks Again.

回覆

Osimi Sea View
Osimi Sea View United States
2017/10/21 上午 02:58:40 #

Very good article post.Really thank you! Great.

回覆

prix carte grise
prix carte grise United States
2017/10/21 上午 06:36:36 #

Im thankful for the blog article.Thanks Again. Want more.

回覆

elakekassa
elakekassa United States
2017/10/21 下午 05:00:52 #

I truly appreciate this post.Much thanks again. Cool.

回覆

Turbotax phone number
Turbotax phone number United States
2017/10/24 上午 10:56:03 #

Thanks so much for the article post.Really thank you! Awesome.

回覆

can ho osimi
can ho osimi United States
2017/10/28 上午 10:06:18 #

Very good blog.Really looking forward to read more. Will read on...

回覆

EZ Battery Reconditioning Review
EZ Battery Reconditioning Review United States
2017/10/30 上午 08:58:39 #

I appreciate you sharing this post.Much thanks again. Really Great.

回覆

mamaweeb
mamaweeb United States
2017/11/1 上午 09:13:41 #

Thanks a lot for the blog article.Really looking forward to read more. Will read on...

回覆

phenocal review
phenocal review United States
2017/11/1 下午 04:40:15 #

Really enjoyed this article post.Really looking forward to read more. Cool.

回覆

phentaslim review
phentaslim review United States
2017/11/3 下午 02:53:36 #

Enjoyed every bit of your post.Much thanks again.

回覆

Looking forward to reading more. Great blog.Really looking forward to read more. Will read on...

回覆

bikinis
bikinis United States
2017/11/24 上午 01:30:10 #

I value the article post.Much thanks again. Want more.

回覆

porno
porno United States
2017/12/1 下午 08:15:48 #

Im obliged for the article post.Thanks Again. Will read on...

回覆

Initial coin offering
Initial coin offering United States
2017/12/3 上午 08:24:15 #

Muchos Gracias for your post.Thanks Again. Keep writing.

回覆

mobil porn
mobil porn United States
2017/12/5 下午 01:15:09 #

Thanks for the post.Really thank you! Really Great.

回覆

Thanks so much for the article.Really thank you! Great.

回覆

Crissy Jadlowiec
Crissy Jadlowiec United States
2017/12/14 下午 12:53:28 #

Very neat blog post.Really thank you! Cool.

回覆

Hanukkah
Hanukkah United States
2017/12/15 上午 02:27:09 #

Muchos Gracias for your article post. Awesome.

回覆

green coffee bean for weight loss
green coffee bean for weight loss United States
2017/12/17 上午 03:53:58 #

Looking forward to reading more. Great article.Really thank you! Really Great.

回覆

Departments
Departments United States
2017/12/17 下午 09:01:46 #

Awesome article post.Really thank you! Really Great.

回覆

canon drivers
canon drivers United States
2017/12/23 上午 09:03:20 #

Thanks for the post.Thanks Again. Awesome.

回覆

Darwin Horan
Darwin Horan United States
2017/12/23 下午 07:31:17 #

Really appreciate you sharing this blog article. Much obliged.

回覆

A big thank you for your article post.Much thanks again. Cool.

回覆

driver hp
driver hp United States
2017/12/25 下午 09:01:05 #

Great article post. Great.

回覆

I value the post.Really looking forward to read more. Really Cool.

回覆

Really informative article. Great.

回覆

canon printer series
canon printer series United States
2017/12/27 下午 10:02:25 #

I loved your post.Much thanks again. Really Great.

回覆

More Help
More Help United States
2018/1/2 下午 08:44:26 #

I really liked your blog post.Thanks Again. Fantastic.

回覆

printer drivers
printer drivers United States
2018/1/3 上午 11:56:49 #

Thank you for your blog article. Cool.

回覆

mobile slots real money
mobile slots real money United States
2018/1/4 下午 10:48:15 #

wow, awesome blog post. Cool.

回覆

colocation miami
colocation miami United States
2018/1/10 下午 01:26:05 #

Awesome blog article.Thanks Again. Fantastic.

回覆

新增評論




  Country flag
biuquote
  • 評論
  • 線上預覽
Loading






NET Magazine國際中文電子雜誌

NET Magazine國際中文電子版雜誌,由恆逸資訊創立於2000,自發刊日起迄今已發行超過500篇.NET相關技術文章,擁有超過40000名註冊讀者群。NET Magazine國際中文電子版雜誌希望藉於電子雜誌與NET Developer達到共同學習與技術新知分享,歡迎每一位對.NET 技術有興趣的朋友們多多支持本雜誌,讓作者群們可以有持續性的動力繼續爬文。<請加入免費訂閱>

月分類Month List