2005.3.8 歐岩亮
課程介紹
如何用智能用戶端技術構建Microsoft Windows Forms Application,並使其具有與Web應用程式一樣的延展性
基礎內容
熟悉.NET開發
理解什麼是多物理層次的概念
課程安排
什麼是智能用戶端
設計思想
偶爾連線應用程式程式
如何開發
代碼訪問安全
智能用戶端
“智能用戶端(Smart Client)”不是一個具體的技術:他融合了許多概念,設計方法和技術
智能用戶端結合了胖用戶端具有強大的使用者介面的優點和Web應用程式具有較強的延展性的優點
實現多個松耦合的物理層
通常:作為展示層Windows UI與作為商業邏輯層的Web Service(中介層)進行通訊
智能用戶端的特性
可以支援開發偶爾連線應用程式程式
真正的分散式處理
可以充分利用用戶端的硬體資源
可以充分利用中央部署的好處,方便的進行軟體升級
Microsoft Application Blocks可以有效協助你構建具有偶爾串連和自動升級特性的應用
示範一
一個簡單的智能用戶端應用程式
任何一個WindowsForm都能變成一個智能用戶端的應用程式。
把WindowsForm應用程式的exe檔案部署在IIS的虛擬目錄中
之後我們通過Http的方式訪問這個exe檔案,瀏覽器就會自動從IIS下載到本地的GAC當中,然後運行這個exe檔案
設計考慮
是否要讓中介層支援簡單的用戶端裝置(PDA,電話等)
是否要建立支援偶爾連線應用程式程式
部署問題
安全和代碼訪問安全
更複雜的應用
警告
安全
配置
代碼訪問安全
偶爾串連的考慮
部署問題
示範二
一個稍微複雜一些的智能用戶端應用程式
如果我們的應用程式試圖訪問我們的磁碟
如果是把這個應用程式部署到IIS伺服器上,在瀏覽器上運行,代碼會去試圖訪問本地磁碟,就會拋出一個從Internet來的程式沒有許可權訪問本地磁碟的異常。為瞭解決這個問題,我們可以通過組態工具來配置訪問安全。
我們可以建立一個安全性原則
我們選擇針對一個Url安全性原則做限定
配置安全性原則許可權,我們選擇完全信任
配置好安全性原則之後,再運行之前的應用程式,在本地建立檔案時就不會拋異常了。
Microsoft Offline Application Block
下載資料並在網路連接斷開的時候能夠繼續工作
能夠檢測到網路連接的情況
將串連狀態改變的情況通知給所有的註冊了的組件
下載並緩衝資料,在網路連接停用情況下允許應用程式繼續工作
當應用程式離線時,在本機存放區變化的資料
當網路連接恢複可用時將變化的資料與伺服器進行同步
:http://msdn.microsoft.com/library/en-us/dnpag/html/offline.asp
示範三
離線資料
ConnectionState是當前網路連接的狀態,如果是第一次登入,會等待下一次網路連接發生變化來改變屬性。
我們在建構函式裡加入了一個delegate,它通過OfflineBlockBuilder來監聽,當OfflineBlockBuilder發現網路連接狀態發生變化的時候,它會通知我們傳入的delegate,我們然後再根據網路狀態的變化來做事情。
Offline代碼的使用
Offline其實是把微軟提供的Offline做了簡單的封裝。下面是運行結果。
如果是Online模式,我們直接從資料庫讀取資訊,否則我們從Cache裡面擷取資料。Cache在快取資料的時候實際上用的就是Hash表。
Cache是自己編寫的一個類
我們會把Cache中的資料,串列化成位元據,儲存到檔案當中。當應用程式重新開啟的時候,會從檔案中讀取二進位資訊,反串列化成Cache對象。
我們可以選擇在資料層做判斷是否是Online,也可以在展示層或者是MVC中的Controller層做判斷。
我們還寫了一個RefreshCache函數,它實際上是建立了一個線程,來不斷在Online狀態緩衝最新資料。
AsynchRefreshCache做的事情是在Online的情況下主動從WebService上下載資料,然後把Cache裡緩衝的資料儲存到磁碟。
應用程式會不停地調用AsynchRefreshCache,因為我們建立了一個線程來做這件事。
部署選項
"No-touch"部署
部署在IIS伺服器上,通過瀏覽器輸入Url方式來臨時下載應用程式並運行,即第一個例子。這種方式沒有任何開銷,但是有一個限制,即下載下來的應用程式不一定能訪問本地資源,用戶端通過.NET架構需要進行一些安全性原則的配置。
Xcopy
如果要對應用程式進行複雜的配置,它就具有一定的限制。
"Bootstrpper"可以通過Internet下載所有需要的應用程式集
Installer
封裝成Setup檔案,用戶端用安裝包安裝
部署考慮
從瀏覽器下載.NET的Windows Forms應用程式
從Internet下載下來的應用程式,可能會造成安全隱患,.NET可能會影響應用程式中的一些功能
使用應用程式和Updater Application Block進行應用程式的升級不會有任何的限制
Updater Application Block
可以協助你:
實現用"Pull"機制升級.NET應用程式
伺服器端會把自己的版本和用戶端的軟體版本進行比對,如果伺服器端軟體版本較高,用戶端會自動去下載最新程式。
使用加密技術來驗證更新的應用程式集的有效性,驗證之後才使用更新了的應用程式集
應用程式的升級過程不需要使用者幹涉
自動的將應用程式升級到最新的版本
:http://www.microsoft.com/downloads/details.aspx?FamliyId=C6C17F3A-D957-4B17-9B97-296FB4927C30&displaylang=en
使用教程:http://dotnetjunkies.com/WebLog/bsblog/archive/2004/06/10/16118/aspx
示範
我們可以自己寫代碼來監視Updater工作的情況,並控制Updater的工作。
如果是Online,我們就執行個體化一個AutoUpdate。
當線程退出,那麼我們停止監測當前網路連接狀態
如果想開啟unsafe修飾,需要在項目的屬性裡面修改Allow Unsafe Code Blocks屬性
Updater的使用。我們首先將所有代碼拷貝到要部署的檔案中。
下面我們將示範如何?應用程式自動升級
如果是我們的應用程式需要升級,那麼需要先關閉應用程式,升級後重新開啟。如果是應用程式需要關閉,那麼關閉之後它線上程中已經消失了,是無法自己再開啟的。AppStart功能就是做了一個應用程式的外殼,用AppStart來啟動應用程式,如果應用程式有更新,那麼會通知AppStart,AppStart就會把應用程式關閉,然後重新開啟應用程式。
Manifest是用來編譯軟體工程版本的工具。
指定工程目錄
我們先要確定把伺服器項目的版本號碼更新,然後這裡的Version寫相同的最新版本號碼。
我們可以用這個工具產生私密金鑰和公開金鑰,並把私密金鑰匯入這個程式裡,對應用程式進行簽名。
配置好之後我們儲存這個配置。這時我們的應用程式裡面多了個Manifest檔案,我們一起打包部署。
部署的檔案中包含一個設定檔AppStart.exe.config
我們的項目中也要有相應配置
client表明將更新後的新的應用程式集放到baseDir目錄裡,server指定從xmlFile目錄下載Manifest,然後把它拷貝到xmlFileDest目錄裡面。拷貝之後會對比Manifest的應用程式版本和運行中的應用程式版本來決定是否升級程式。
運行程式,如果有新版本,會提示是否下載新版本。
升級後,AppStart.exe.config設定檔也會更新
總結
智能用戶端不是一個具體的技術,但是它是由很多的概念,設計方法和技術組成的
Windows Forms和Web Service給智能用戶端提供了.NET支援
智能用戶端需要考慮很多問題:勘探,代碼訪問安全,部署問題,偶爾串連的問題
Microsoft Application Block為智能用戶端的部署問題提供瞭解決方案
2010.10.18