国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Dotm im.Sync框架的And roid移動(dòng)數(shù)據(jù)同步方法及應(yīng)用*

2020-06-18 09:08:06周千明朱欣娟解建倉(cāng)
關(guān)鍵詞:服務(wù)器端離線客戶端

周千明朱欣娟解建倉(cāng)

(1.西安工程大學(xué)計(jì)算機(jī)科學(xué)學(xué)院 西安 710048)(2.西安理工大學(xué)省部共建西北旱區(qū)生態(tài)水利國(guó)家重點(diǎn)實(shí)驗(yàn)室 西安 710048)

1 引言

隨著移動(dòng)通信與互聯(lián)網(wǎng)技術(shù)的迅速發(fā)展,運(yùn)行在移動(dòng)智能設(shè)備的各類APP大量涌現(xiàn)并應(yīng)用到不同領(lǐng)域。從技術(shù)層面看,移動(dòng)智能應(yīng)用可以分為在線模式、純離線模式與“在線+離線”混合模式[1~2]。在線模式下系統(tǒng)數(shù)據(jù)一般存儲(chǔ)在服務(wù)器端的大中型數(shù)據(jù)庫(kù)(如SQL Server、Oracle、MySQL等),移動(dòng)應(yīng)用依賴于穩(wěn)定可靠的網(wǎng)絡(luò)連接;純離線模式下系統(tǒng)數(shù)據(jù)一般存儲(chǔ)在移動(dòng)終端的輕量級(jí)數(shù)據(jù)庫(kù)(如SQLite、Couchbase Lite、SQL Server CE等),移動(dòng)應(yīng)用不需要網(wǎng)絡(luò)連接;“在線+離線”混合模式則比較復(fù)雜,通常情況下系統(tǒng)數(shù)據(jù)存儲(chǔ)在服務(wù)器端,移動(dòng)終端暫存部分?jǐn)?shù)據(jù),因而形成了分布式異構(gòu)數(shù)據(jù)庫(kù)[3~4]。在移動(dòng)應(yīng)用運(yùn)行過程中,當(dāng)移動(dòng)終端或服務(wù)器端執(zhí)行數(shù)據(jù)更新操作后,為了保證數(shù)據(jù)的完整性和一致性,需要進(jìn)行雙向的數(shù)據(jù)同步。然而,由于移動(dòng)網(wǎng)絡(luò)本身具有復(fù)雜性、動(dòng)態(tài)性、弱連接性以及通信延遲與帶寬相對(duì)有限等特性[5],因而移動(dòng)應(yīng)用的數(shù)據(jù)同步技術(shù)備受考驗(yàn)。

在移動(dòng)智能應(yīng)用的大背景下,移動(dòng)應(yīng)用的數(shù)據(jù)同步逐漸成為熱點(diǎn)議題[6~8]。文獻(xiàn)[9]采用SDN技術(shù)建立移動(dòng)數(shù)據(jù)同步機(jī)制,通過SDN的控制平面維護(hù)同步服務(wù)器的數(shù)據(jù)表。文獻(xiàn)[10]提出一種基于改進(jìn)的消息摘要數(shù)據(jù)同步算法ISAMD,采用標(biāo)準(zhǔn)的SQL函數(shù)進(jìn)行數(shù)據(jù)同步。這兩種移動(dòng)數(shù)據(jù)同步策略的核心邏輯均依靠中間層的同步服務(wù)器完成,影響系統(tǒng)的部署成本和性能,難以滿足大多數(shù)移動(dòng)應(yīng)用的實(shí)際需求。文獻(xiàn)[11]與文獻(xiàn)[12]分別針對(duì)iOS與Windows移動(dòng)平臺(tái)設(shè)計(jì)了相應(yīng)的數(shù)據(jù)同步方案,缺點(diǎn)在于方案對(duì)平臺(tái)的可移植性有限。作為對(duì)以上移動(dòng)數(shù)據(jù)同步方法的改進(jìn),微軟高級(jí)軟件工程師Sébastien Pertus在GitHub網(wǎng)站開源了一種跨平臺(tái)的關(guān)系數(shù)據(jù)庫(kù)同步框架Dotmim.Sync[13],該框架基于 微 軟.NET Standard 2.0[14]研 發(fā),支 持 在IOT、Xamarin、.NET、UWP等環(huán)境中使用?;诖耍疚闹攸c(diǎn)依托Dotmim.Sync框架,以Android平臺(tái)的移動(dòng)終端為例,探索一種高效實(shí)用的移動(dòng)數(shù)據(jù)同步方法。

2 Dotm im.Sync框架簡(jiǎn)介

Dotmim.Sync框架包含針對(duì)多種不同主流關(guān)系數(shù)據(jù)庫(kù)的子項(xiàng)目解決方案,每個(gè)子項(xiàng)目均發(fā)布為NuGet程序包[15],便于開發(fā)人員基于.NET平臺(tái)在項(xiàng)目中添加、移除與更新引用。在GitHub網(wǎng)站上展示的最新Dotmim.Sync框架中,一共發(fā)布7個(gè)NuGet程序包,如圖1所示。

圖1 Dotmim.Sync發(fā)布的NuGet程序包

其中,Dotmim.Sync.Core為核心NuGet程序包,主要執(zhí)行數(shù)據(jù)同步的核心邏輯。Dotmim.Sync.SqlServer、Dotmim.Sync.Sqlite、Dotmim.Sync.MySql、Dotmim.Sync.PostgreSql分別為針對(duì)SQL Server、SQLite、MySQL、PostgreSQL數(shù)據(jù)庫(kù)的NuGet程序包,可以根據(jù)實(shí)際項(xiàng)目的數(shù)據(jù)庫(kù)部署需要,基于.NET平臺(tái)在服務(wù)器端與客戶端程序中分別引用相應(yīng)的NuGet程序包,進(jìn)而完成服務(wù)器端與客戶端數(shù)據(jù)庫(kù)的數(shù)據(jù)同步。Dotmim.Sync.Web.Server與Dotmim.Sync.Web.Client NuGet程序包實(shí)現(xiàn)基于HTTP協(xié)議通過Web服務(wù)器完成服務(wù)器端與客戶端數(shù)據(jù)庫(kù)的同步操作。

3 處理流程

本文提出的基于Dotmim.Sync框架的Android移動(dòng)數(shù)據(jù)同步方法處理流程如圖2所示。

圖2 基于Dotmim.Sync框架的Android移動(dòng)數(shù)據(jù)同步處理流程

在圖2中,采用雙向虛線連接的位于Android移動(dòng)終端的SQLite與數(shù)據(jù)庫(kù)服務(wù)器SQL Server為最終需要進(jìn)行數(shù)據(jù)同步的關(guān)鍵環(huán)節(jié)。首先,在服務(wù)器端創(chuàng)建.NETCoreWeb代理,調(diào)用Dotmim.Sync框架的Dotmim.Sync.SqlServer與Dotmim.Sync.Web.Server兩個(gè)NuGet程序包,面向客戶端提供基于REST風(fēng)格的不同Web API(.NETCoreWeb API或.NETWeb API架構(gòu)),實(shí)現(xiàn)數(shù)據(jù)交互的核心操作,數(shù)據(jù)交互格式采用輕量級(jí)的JSON格式。其次,.NET CoreWeb代理面向數(shù)據(jù)庫(kù)服務(wù)器端采用經(jīng)典的ADO.NET技術(shù)訪問SQL Server。最后,在Android移動(dòng)終端,Android APP采用SQLite.NET類庫(kù)完成對(duì)本地SQLite數(shù)據(jù)庫(kù)的CRUD基本操作。同時(shí),需要調(diào)用Dotmim.Sync框架的Dotmim.Sync.Sqlite與Dotmim.Sync.Web.Client兩個(gè)NuGet程序包,實(shí)現(xiàn)對(duì).NET CoreWeb代理提供的用于數(shù)據(jù)同步核心API的訪問。

4 關(guān)鍵技術(shù)及實(shí)現(xiàn)

4.1 創(chuàng)建基于REST風(fēng)格的Web API

考慮到.NET Core框架整合了ASP.NETMVC與ASP.NETWeb API,具備明顯的跨平臺(tái)優(yōu)勢(shì),因此采用。NETCoreWeb API架構(gòu)創(chuàng)建基于REST風(fēng)格的Web API。核心步驟如下:

Step 1在服務(wù)配置方法中注冊(cè)同步提供程序:

services.AddSyncServer(connectionString,configuration=>{configuration.Add(new string[]{“Table”});});//connectionString為SQLServer數(shù)據(jù)庫(kù)的連接字符串,Table表示需要同步的數(shù)據(jù)表。

Step 2創(chuàng)建數(shù)據(jù)同步控制器,采用依賴注入的方式注入服務(wù)器端Web代理提供程序:

private WebProxyServerProvider webProxy;//定義服務(wù)器端Web代理類型成員變量

public SyncController(WebProxyServerProvider proxy){webProxy=proxy};//在構(gòu)造方法中初始化webProxy,SyncController為控制器名稱。

Step 3在控制器的POST方法中調(diào)用HandleRequestAsync方法,執(zhí)行異步請(qǐng)求,完成數(shù)據(jù)同步功能:

awaitwebProxyServer.HandleRequestAsync(this.HttpContext);//參數(shù)為請(qǐng)求上下文對(duì)象。

4.2 基于Xamarin.Android的移動(dòng)終端APP實(shí)現(xiàn)

Xamarin.Android為.NET開發(fā)人員提供了完整的Android SDK,實(shí)現(xiàn)在Visual Studio IDE中利用C#創(chuàng)建完全本機(jī)的Android應(yīng)用?;诖?,為了有效利用Dotmim.Sync框架,基于Xamarin.Android設(shè)計(jì)與實(shí)現(xiàn)移動(dòng)終端APP。主要步驟如下:

Step 1在項(xiàng)目的AndroidManifest.xm l文件中添加網(wǎng)絡(luò)訪問、讀寫外部存儲(chǔ)等權(quán)限。

Step 2由于Google從Android 6.0開始引入了危險(xiǎn)權(quán)限動(dòng)態(tài)申請(qǐng)授權(quán)機(jī)制,讀寫外部存儲(chǔ)被劃分到危險(xiǎn)權(quán)限系列中,因此需要進(jìn)行動(dòng)態(tài)申請(qǐng):

this.RequestPermissions(new string[]{Manifest.Permission.ReadExternal Storage,Manifest.Permission.WriteExternalStorage},1);//傳入的參數(shù)為申請(qǐng)的權(quán)限數(shù)組與請(qǐng)求碼

Step 3在數(shù)據(jù)同步事件中,開啟子線程,在子線程中執(zhí)行數(shù)據(jù)同步操作:

var clientProvider= new SqliteSyncProvider(connString);//創(chuàng)建客戶端同步提供程序并實(shí)例化,其中connString為本地SQLite數(shù)據(jù)庫(kù)的路徑

var proxyClientProvider=new WebProxyClient-Provider(new Uri(“https://202.200.200.36/api/sync”));//創(chuàng)建客戶端代理并實(shí)例化,參數(shù)為.NET CoreWeb API的數(shù)據(jù)同步接口地址

await(new SyncAgent(clientProvider,proxyClientProvider)).SynchronizeAsync();//實(shí)例化SyncAgent對(duì)象,執(zhí)行數(shù)據(jù)同步任務(wù)

4.3 數(shù)據(jù)同步方向與沖突問題解決

1)數(shù)據(jù)同步方向

在Dotmim.Sync框架中,提供了用于表征數(shù)據(jù)同步方向的枚舉SyncDirection。該枚舉包含3個(gè)值:Bidirectional(默認(rèn)值)、DownloadOnly與Upload-Only,分別對(duì)應(yīng)“雙向同步”、“僅下載同步”與“僅上傳同步”3種方向,可以具體為每個(gè)數(shù)據(jù)表分別設(shè)定同步方向:

agent.SetConfiguration(c=>{//agent為SyncAgent對(duì)象

c[“Table1”].SyncDirection=SyncDirection.Bidirectional;//設(shè)置Table1雙向同步

c[“Table2”].SyncDirection=SyncDirection.DownloadOnly;//設(shè)置Table2僅下載同步});

2)沖突問題解決

通常情況下,Dotmim.Sync框架采用SyncConfiguration對(duì)象的配置策略屬性ConflictResolution-Policy解決數(shù)據(jù)沖突問題。ConflictResolutionPolicy的可選項(xiàng)如下:

(1)ConflictResolutionPolicy.Serverwins,默認(rèn)選項(xiàng),表征服務(wù)器端為所有沖突的獲勝方

(2)ConflictResolutionPolicy.Clientwins,表征客戶端為所有沖突的獲勝方

與設(shè)定數(shù)據(jù)同步方向類似,通過SyncAgent對(duì)象的SetConfiguration方法進(jìn)行設(shè)置:

agent.SetConfiguration(c=>{c.ConflictResolutionPolicy=ConflictResolutionPolicy.

ClientW ins;});//設(shè)定客戶端為所有沖突的獲勝方

當(dāng)數(shù)據(jù)同步過程中產(chǎn)生沖突問題時(shí),由服務(wù)器端負(fù)責(zé)解決,具體流程如圖3所示。

圖3 數(shù)據(jù)沖突問題解決流程

在圖3所示流程中,首先執(zhí)行數(shù)據(jù)同步的常規(guī)過程,由客戶端發(fā)起數(shù)據(jù)同步POST請(qǐng)求,服務(wù)器端.NETCoreWeb API嘗試執(zhí)行數(shù)據(jù)同步任務(wù)。其次,當(dāng)檢測(cè)到數(shù)據(jù)沖突時(shí),服務(wù)器端檢測(cè)預(yù)先設(shè)置的ConflictResolutionPolicy屬性值,如果其值為Serverwins,則服務(wù)器端獲勝,將服務(wù)器端的變化數(shù)據(jù)強(qiáng)制應(yīng)用到客戶端的數(shù)據(jù)庫(kù)中,反之則客戶端獲勝,將客戶端的變化數(shù)據(jù)強(qiáng)制應(yīng)用到服務(wù)器端的數(shù)據(jù)庫(kù)中。

5 系統(tǒng)應(yīng)用

高校固定資產(chǎn)管理系統(tǒng)是當(dāng)前高校智慧校園平臺(tái)建設(shè)的重要組成部分,而固定資產(chǎn)巡檢子系統(tǒng)建設(shè)是其重點(diǎn)內(nèi)容。由于受校園地理結(jié)構(gòu)、建筑布局等因素影響,在固定資產(chǎn)巡檢過程中,往往需要面對(duì)網(wǎng)絡(luò)不可及或網(wǎng)絡(luò)信號(hào)差的實(shí)際環(huán)境。因此,對(duì)離線環(huán)境的支持是固定資產(chǎn)巡檢子系統(tǒng)待解決的關(guān)鍵問題。基于本文提出的基于Dotmim.Sync框架的Android移動(dòng)數(shù)據(jù)同步方法,采用Microsoft Visual Studio 2017集成開發(fā)環(huán)境,以Microsoft SQL Server 2014建立數(shù)據(jù)庫(kù)服務(wù)器,借助jQuery EasyUI界面插件技術(shù)、.NETCore框架與Xamarin.Android開發(fā)平臺(tái)研究與實(shí)現(xiàn)國(guó)內(nèi)某高校的固定資產(chǎn)巡檢系統(tǒng),系統(tǒng)體系結(jié)構(gòu)圖4所示。

其中,系統(tǒng)的服務(wù)器端包括基于REST風(fēng)格的.NET Core Web API與數(shù)據(jù)庫(kù)服務(wù)器,.NET Core Web API對(duì)外提供所有與資產(chǎn)巡檢相關(guān)的業(yè)務(wù)邏輯接口。系統(tǒng)從用戶使用的角度分為PC端與Android移動(dòng)終端,二者均可以通過Internet訪問.NET CoreWeb API,不同之處在于PC端與Internet建立的連接是穩(wěn)定可靠的,而Android移動(dòng)終端在巡檢時(shí)不能確保對(duì)Internet的實(shí)時(shí)訪問。在系統(tǒng)運(yùn)行過程中,高校資產(chǎn)部門領(lǐng)導(dǎo)從PC端登錄系統(tǒng),下發(fā)巡檢任務(wù)。巡檢工作人員收到巡檢指令后,按照巡檢任務(wù)安排前往相應(yīng)地點(diǎn)開展巡檢工作,采用Android移動(dòng)終端的APP掃描預(yù)先粘貼在設(shè)備的二維碼,不需要關(guān)心現(xiàn)場(chǎng)的網(wǎng)絡(luò)環(huán)境,即可查看設(shè)備詳情及巡檢歷史記錄,并根據(jù)實(shí)際情況填寫與提交巡檢記錄。當(dāng)網(wǎng)絡(luò)信號(hào)不可及或網(wǎng)絡(luò)信號(hào)差時(shí),巡檢記錄保存在本地的SQLite數(shù)據(jù)庫(kù)中,等到系統(tǒng)檢測(cè)到穩(wěn)定的網(wǎng)絡(luò)信號(hào)時(shí),系統(tǒng)自動(dòng)完成本地SQLite數(shù)據(jù)庫(kù)與服務(wù)器端SQL Server數(shù)據(jù)庫(kù)的雙向數(shù)據(jù)同步。目前,該系統(tǒng)運(yùn)行穩(wěn)定,提高了固定資產(chǎn)巡檢效率,進(jìn)一步有效提升了學(xué)校信息化管理水平。

圖4 高校固定資產(chǎn)巡檢系統(tǒng)體系結(jié)構(gòu)

6 結(jié)語

移動(dòng)計(jì)算環(huán)境具有復(fù)雜性、動(dòng)態(tài)性、弱連接性以及通信延遲與帶寬相對(duì)有限等特性,使得數(shù)據(jù)同步問題成為“在線+離線”混合模式移動(dòng)智能應(yīng)用的技術(shù)難點(diǎn)。本文依次為切入點(diǎn),針對(duì)復(fù)雜環(huán)境下移動(dòng)智能應(yīng)用數(shù)據(jù)同步的實(shí)際需求,提出一種基于Dotmim.Sync框架的Android移動(dòng)數(shù)據(jù)同步方法。將該方法應(yīng)用到高校的固定資產(chǎn)巡檢系統(tǒng)中,取得了較好的效果,實(shí)踐表明本文提出的解決方案具有較強(qiáng)的可操作性與較高的應(yīng)用推廣價(jià)值。

猜你喜歡
服務(wù)器端離線客戶端
異步電機(jī)離線參數(shù)辨識(shí)方法
呼吸閥離線檢驗(yàn)工藝與評(píng)定探討
淺談ATC離線基礎(chǔ)數(shù)據(jù)的準(zhǔn)備
縣級(jí)臺(tái)在突發(fā)事件報(bào)道中如何應(yīng)用手機(jī)客戶端
孵化垂直頻道:新聞客戶端新策略
基于Vanconnect的智能家居瘦客戶端的設(shè)計(jì)與實(shí)現(xiàn)
離線富集-HPLC法同時(shí)測(cè)定氨咖黃敏膠囊中5種合成色素
中成藥(2018年2期)2018-05-09 07:20:09
淺析異步通信層的架構(gòu)在ASP.NET 程序中的應(yīng)用
成功(2018年10期)2018-03-26 02:56:14
在Windows中安裝OpenVPN
客戶端空間數(shù)據(jù)緩存策略
北票市| 固阳县| 鸡西市| 额济纳旗| 佛教| 攀枝花市| 南丹县| 临安市| 原平市| 五河县| 泸水县| 如东县| 赣州市| 莱芜市| 松潘县| 衡山县| 诸城市| 云霄县| 兴安盟| 清苑县| 五常市| 商都县| 汽车| 陇西县| 岑巩县| 六安市| 平罗县| 礼泉县| 衡东县| 定兴县| 南充市| 镶黄旗| 连平县| 曲沃县| 宁都县| 那曲县| 柳河县| 望奎县| 顺平县| 海原县| 蓝田县|