簡介 從設備的角度
本文的討論重點在於 Pocket PC 平台
但是
Microsoft®
NET Compact Framework 也可以在非 Pocket PC 的 Microsoft Windows® CE
NET 設備上運行
此處討論的
NET Compact Framework 相關概念也可以適用於這些設備
NET Compact Framework 數據訪問策略涉及許多方面
關鍵方面是連接
其他各個方面都取決於此
由於 Pocket PC 既可以聯機使用也可以脫機使用
因此數據訪問策略需要定義如何
在聯機時管理和使用遠程服務器上的數據
在脫機時存儲和使用數據
在 Pocket PC 從先前的脫機狀態進入聯機狀態時交換數據
在數據訪問策略環境中
建立標准術語非常重要
標准術語的建立對於如何定義 Pocket PC 和服務器之間的數據交換尤其重要
從概念的角度
交換數據的方法有兩種
數據同步和數據傳輸
數據同步支持雙向的數據交換
並實現確保兩端數據相同的功能
在很多情況下
同一數據可以在 Pocket PC 處於脫機狀態時在多個地方進行修改
然後與服務器同步
因此
同步功能常常需要包含沖突解決功能
以處理在斷開連接的 Pocket PC 返回到聯機狀態以同步數據時發生的並發性問題
下面的示例說明了四處走動的推銷員在脫機狀態下實地更新訂單時發生的這種情況
在推銷員同步更改之前
一位聯機客戶服務代表也對同一訂單進行更新
設計周到的沖突解決機制能夠在出現沖突時決定應采取何種措施
例如
基於同步的角色或時間使四處走動的推銷員覆蓋客戶服務代表
或者系統是否應通知用戶或用戶組出現了沖突
數據傳輸也支持雙向的數據交換
但是卻沒有用於確保兩端數據相同的功能
也沒有沖突解決
在很多情況下
數據傳輸是有效的方法
並且不需要數據同步
數據傳輸的示例有
將靜態引用數據從服務器傳輸到 Pocket PC
僅將新收集的數據從 Pocket PC 傳輸到服務器
以及將明確引入和引出或分段到單個用戶的數據傳輸到 Pocket PC 或從 Pocket PC 傳出
並在數據被引出或由特定用戶擁有時在服務器上將其標為只讀數據
在這一點上
術語
數據同步
和
數據傳輸
反應了它們真實的含義
而在同時包含這兩個術語時
則使用
數據交換
數據訪問策略的各個方面 在根本上
NET Compact Framework 數據訪問策略涉及兩個方面
如何在 Pocket PC 上存儲數據
從應用程序的角度來看
數據可以保存在關系數據庫(例如 Microsoft SQL Server
; CE)
本地文件(例如通常通過 DataSets 管理的 XML 文件)以及在應用程序終止時配置的基於會話的內存內數據結構中
如何與服務器交換數據
Pocket PC 和服務器之間數據交換的執行方式根據進行通信的 Pocket PC 層與服務器層的不同而有所差異
圖
說明了 Pocket PC 中的三個層以及服務器中的三個層
圖 設備和服務器中的應用程序層 NET Compact Framework 自身包含的數據交換選項包括
Pocket PC 數據庫對服務器數據庫
Pocket PC 數據庫與服務器數據庫直接交換數據
此選項在涉及很少業務邏輯或不涉及業務邏輯以及在數據量很大的情況下有效
並使用 SQL Server CE 的遠程數據訪問(英文)和合並復制(英文)功能來執行
如果要求進行數據同步而不僅僅是數據傳輸
則合並復制功能可以提供在服務器端的 SQL Server 調節程序中執行的內部沖突解決
Pocket PC 組件對服務器組件
Pocket PC 應用程序與服務器上的組件進行通信
此選項能使業務邏輯(作為 Web 服務 [英文] 執行)成為數據交換的一部分
當數據保存在本地的 XML 文件或 SQL Server CE 數據庫中時
均可使用此選項
Pocket PC 組件對服務器數據庫
Pocket PC 直接連接到服務器數據庫
在 Pocket PC 應用程序需要管理遠程數據庫的大量數據
而不必將數據放入 Pocket PC
以及業務邏輯不是主要的考慮因素時
經常使用此選項
此選項使用 System
Data
SqlClient(英文)命名空間執行
在數據保存在本地的 XML 文件和 SQL Server CE 數據庫時均可使用
僅在服務器上交換數據
Pocket PC 應用程序用戶界面元素可以直接連接到服務器端的組件或作為使用 Pocket PC Web 浏覽器的 Web 應用程序執行
顯然
這要求 Pocket PC 始終連接到服務器並需要足夠的帶寬
該選項可行的實例是地理環境受限制
但可以實現 WiFi 網絡的情況
例如在倉庫
保健機構
辦公室中等等
此選項不要求將所有數據存儲在 Pocket PC 本地
在確定如何處理
如何存儲數據
和
如何交換數據
這兩個方面之前
必須了解或建立某些基本條件
數據特性
連接和系統結構
數據特性 解決方案的數據特性顯示了以下重要信息
要存儲在 Pocket PC 上的靜態數據及事務性數據的量
如果要存儲在 Pocket PC 上的數據量少(在本例中為少於
至
kb)
則數據可以存儲在本地的 XML 文件中
如果數據量較大
則 SQL Server CE 將提供較高的性能及可靠性
原因是
將使用 SQL Server CE 查詢引擎訪問數據
該查詢引擎支持具有更高性能和可管理性的結構查詢語言 (SQL)
要與服務器交換的事務性數據的量
如果要在服務器和 Pocket PC 之間交換的事務性數據的量少(例如少於
kb 至
Mb)
則可使用 Web 服務將數據作為 XML 傳遞
如果數據量較多
則遠程數據訪問和合並復制功能將提供較高的性能
原因是
SQL Server CE 客戶端代理和服務器代理將執行有效的數據壓縮
而且數據在到達最終目的地之前必須經過的進程要少得多
例如
在使用遠程數據訪問將數據從 Pocket PC 傳輸到服務器時
數據無需經過 Pocket PC 端的 OLEDB CE
CLR/NET CF
SQL Server CE 數據提供程序和 ADO
NET 層
當數據傳輸到服務器時
也無需經過服務器上相應的這些程序
而是
數據可以從客戶端代理直接傳遞到服務器代理
也可以通過 Internet Information Server 直接傳遞到遠程 SQL Server
請務必注意
如果數據被存儲為本地 XML 文件
則可以使用 Web 服務進行數據交換
如果數據存儲在 SQL Server CE 中
也可能使用 Web 服務
而不是遠程數據訪問和合並復制
其原因包括使用了業務邏輯和現有的系統結構策略(可能適合)
連接 解決方案的連接方面涉及 Pocket PC 聯機時的可用帶寬以及 Pocket PC 的聯機頻率問題
這些因素有時可以作為前提條件給定
有時也可以進行定義和控制
由於 XML 通常包含大量未經壓縮的重復元數據
因此
對於相同的數據
Web 服務比 SQL Server CE 遠程數據訪問和合並復制需要更多的帶寬
但事實表明
當需要交換大量數據時
調用的是遠程數據訪問和合並復制的功能設置
另外
在數據交換頻率低時也經常使用這兩種方法
這可能會提高需要交換的數據量
這意味著
在現實中
SQL Server CE 遠程數據訪問和合並復制常用於高帶寬的情況
而 Web 服務常用於低帶寬的情況
因此
在使用 Web 服務時
聊天式
(大量小請求)設計比
區塊式
(少量大請求)設計更適合
系統結構 系統結構方面涉及系統集成的總體問題
移動解決方案可以看成是與現行系統或現行系統的擴展和核心部分相連接的獨立解決方案
然而 Pocket PC 解決方案通常不是獨立的
因為它們需要與其他系統進行通信
因此
如果沒有系統結構
則必須定義系統結構
如果已有系統結構
則應遵守
目前
大多數系統均作為技術界面驅動的多層解決方案實現
服務器端的應用程序已被組件化
以便啟用代碼的重復使用以及業務邏輯和數據的分離
並提高可管理性
XML 和 Web 服務的使用繼續推動該項開發
並且
NET Compact Framework 應用程序由於對 XML 和 Web 服務消費的本地支持而完全適應此結構
另兩種系統集成實現方式是使用隊列的異步消息和數據庫驅動集成
通過將 Web 服務界面用於服務器端的 MSMQ 隊列
或通過在 Pocket PC 和服務器之間使用 Web 服務以及在服務器和後備辦公室系統之間使用隊列
NET Compact Framework 應用程序可以遵守這些實現方式
數據庫驅動的集成是 SQL Server CE 的固有部分
這一點我們已經討論過
代碼演練 讓我們看一些演示如何執行上面提到的選項的示例代碼
源代碼來自一個稱為 Feedback Anyplace 的示例應用程序(用在一個稱為 Architect Webcast:Designing Integrated Pocket PC Applications with
NET Compact Framework [英文] 的 Webcast 中)
演示了質檢人員可以如何使用 Pocket PC 在捕獲並報告生產中的問題
該示例需要使用 IntelliProg 的 RichInk 控制才能運行
您可以下載源代碼
包括
NET Compact Framework 應用程序
Web 服務和數據庫組件
該示例項目是數據傳輸而非數據同步的示例
在 Pocket PC 上存儲數據 下列代碼演示了如何將類似於類的屬性包存儲到 DataSet 和本地 XML 文件中
Public Sub Save()
保存新項目或更新現有項目
Dim ds as DataSet
Dim dr As DataRow
Dim expr As String =
ID =
+ m_ID +
If m_NewItem Then
將新行添加到表
dr = frmMain
ds
Tables(
Feedback
)
NewRow()
Else
查找現有行
使用 Select 方法查找與過濾器匹配的行
dr = frmMain
ds
Tables(
Feedback
)
Select(expr)(
)
End If
設置數據行屬性
dr(
ID
) = m_ID<
From:http://tw.wingwit.com/Article/program/net/201311/13997.html