Smart Client技術簡要總結
1.Smart Client簡介
Smart Client簡稱智能客戶端,是Microsoft推出的一種將B/S(瘦客戶端)和C/S(胖客戶端)結合在一起的一種技術。Smart Client結合了B/S和C/S的優勢,具有新的特點。
Smart Client的優點
易于升級
類似于B/S架構的程序,只要在服務器上更新軟件,進行簡單配置,客戶端會自動進行軟件的更新。比如在服務器的站點上建立一個虛擬目錄,將客戶端應用程序發布到該虛擬目錄中,客戶通過HTTP方式安裝更新程序。
富客戶端,強大的用戶界面,更好的用戶體驗
Smart Client可以使用WinForm開發Client端程序,可以充分使用Winform上的各種控件和資源,突破B/S(瘦客戶端)在表現能力上的限制,WEB如果實現某些功能可能必須通過ActiveX或Applet。
充分利用Client端資源
充分使用客戶端的軟件資源和硬件資源。
可以支持在線使用和離線使用
B/S程序需要實時的網絡連接,數據交換和數據處理需要反復的請求響應,需要反復刷新頁面。Smart Client允許用戶將數據下載到Client端進行離線的數據處理,當用戶重新連接網絡時,可以手動或者自動向服務端提交更新數據。
2.開發Smart Client需要解決的問題
數據沖突
Smart Client 允許將數據保存到Client端,離線處理數據,數據處理好之后向服務端提交,但是向服務端提交時會遇到并發的問題,用戶離線處理的數據很有可能會出現數據沖突。Smart Client需要解決好并發數據沖突的問題。
數據安全和應用程序安全
離線處理意味著需要把數據存儲在本地,需要防范敏感數據的非授權訪問。我們上面提到Smart Client可以通過HTTP的方式安裝部署和更新Client端程序,需要防范非授權的更新和程序運行。
3.Smart Client技術點簡介
Smart Client部署技術簡介(OnceClick技術簡介)
OnceClick技術允許以三種方式發布應用程序,WEB方式、網絡共享目錄、媒體發布(如CDROM)等。WEB方式將應用程序發布到站點或虛擬目錄,可以通過HTTP的方式安裝、更新應用程序;網絡共享目錄將應用程序發布到網絡中存在的公共目錄中,用戶可以通過共享目錄安裝更新應用程序;媒體發布可以通過CDROM安裝應用程序,然后通過其他方式為應用程序通過更新。
Smart Client離線數據處理
Smart Client離線數據處理的方式有三種:數據庫同步、隔離存儲區、消息隊列。數據庫同步需要保持Client數據和Server端的數據庫同步;隔離存儲區需要在Client端開辟一塊空間存儲離線時的數據;消息隊列是把數據處理提交給MQ,然后通過MQ提交到服務端(MQ只是一種提交數據的方式,并不能解決數據沖突的問題)。下面用一個例子介紹隔離存儲區的實現方式:
隔離存儲區就是在Client端開辟一塊空間存儲離線時的數據,在進行隔離存儲區操作時,我們將會用到一個非常有用的命名空間 - System.IO.IsolatedStorage。

using System.IO.IsolatedStorage;
using System.Data;
namespace WaitHandleExample
{
class CacheHelper
{
/// <summary>
/// 將數據寫入本地文件
/// </summary>
/// <param name="data"></param>
/// <param name="fileName"></param>
public static void WriteDataSetToIsolatedStorage(DataSet data, string fileName)
{
IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForAssembly();
using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream(fileName, FileMode.Create, isoStore))
{
using (StreamWriter writer = new StreamWriter(isoStream))
{
data.WriteXml(writer, XmlWriteMode.DiffGram);
}
}
}
/// <summary>
/// 從本地文件中讀出數據
/// </summary>
/// <param name="data"></param>
/// <param name="fileName"></param>
public static void ReadDataSetFromIsolatedStorage(DataSet data, string fileName)
{
IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForAssembly();
using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream(fileName, FileMode.Open, isoStore))
{
using (StreamReader reader = new StreamReader(isoStream))
{
data.ReadXml(reader, XmlReadMode.DiffGram);
}
}
}
}
}
4.SmartClient的基本系統架構
系統架構簡單介紹
關鍵點說明:
出于降低復雜性的考慮,首先保證Client下載數據不落地,即Client端獲取的原始數據不在本地磁盤上存儲,對原始數據的處理結果發送給MQ,由MQ來完成最終的提交。
為了盡量避免數據沖突,通過業務協商和技術途徑,盡量按用戶分配原始數據,減少并發產生的數據沖突。
WinForm程序開發完成后,考慮使用微軟的OnceClick技術發布到WEB站點上,所有的部署和后續程序更新通過WEB站點完成。
用戶驗證等數據交互工作由Client端調用Web Service來完成。
5.選擇合適的架構
C/S架構和B/S架構雖然都有各自的缺點,但都有各自適合的應用場景,比如B/S架構如果碰到復雜的用戶界面時,用戶體驗可能會比較差,但是在實際業務需求中,絕大部分的用戶界面并不是非常復雜,少部分的復雜處理可以在業務需求允許的范圍內使用JOB,SSIS或者自動處理程序來完成,所以選擇B/S架構還是非常合適的。Smart Client提供了一種非常棒的開發思想,如果碰到收銀機、簡易手持設備系統時,離線處理可以帶來很大的便利。從客觀上來說,每種架構都自己的優勢和不足,客觀分析,根據需求、開發效率、成本、維護更新等因素選擇合適的架構。