Net Framework下的層間(遠程)傳輸對象及技術
Net Framework實現了許多新的技術以支持多層分布式處理
它提供了豐富的類庫
對象及方法使得在不同層(物理上分離或僅僅是邏輯上分離)間的數據傳輸更為簡單
)
支持遠程數據傳送的對象
l ADO
NET DataSet對象
l ADO
NET DataTable對象
l XmlDocument對象
l XmlDataDocument對象
)
支持遠程數據傳送的類/方法
l Serialization類
Serialization類描述了一個將數據轉換為一種能復制到另一個過程的格式的對象的過程
前面提及的可遠程傳輸的對象具有串行化整個內容的能力
以便它可以通過一個通道來傳送
這個通道可以直接通過TCP/IP
或者通過HTTP
當然
它們也可以在另一端解除串行化
因此客戶機就得到一個原對象的完整副本
l System
Runtime
Remoting類
System
Runtime
Remoting命名空間提供的對象可用來為對象創建代理以實現遠程數據傳送
在這種情形下
對象保留在服務器上
並且客戶機只收到一個代理對象的引用
這個代理對象表示原來的基於服務器的對象(這就是我們怎樣遠程使用一個DataReader的方法)
示意如下圖
對於客戶機
這個代理提供了與原始對象相同的方法和屬性
然而
當客戶機與代理對象相互作用時
調用被自動串行化
並通過通道(網絡)傳送給服務器上的對象
然後
任何響應和結果通過通道被傳送回客戶機
這兩個遠程技術都允許客戶機使用原來在服務器上創建的對象
我們能夠串行化一個DataSet對象或者Xml文檔
同時我們也能串行化其它的如集合這樣的對象
比如一個哈希表(Hashtable)或數組(Array)
N層模型中的數據處理及對象選擇
首先需要考慮的是希望從數據存儲中提取出來的數據做些什麼?這個問題的答案對我們所使用對象的基本選擇的影響將比其他任何事情都要大
甚至在某種程度上定義了我們希望完成任務的性能的種類
)
只用於顯示的數據
如果只是想以一種固定格式為終端用戶顯示數據的話
一般來說根本就沒有必要遠程傳輸數據
我們沒有必要在線上將所有的數據傳送給客戶機
我們只能傳給它們客戶設備能接受的任何格式的最終顯示信息
在這種情形中
Reader
對象提供了一種只讀的
僅向前的理想且性能最優的技術
當與能實現服務器端數據綁定的服務器控件一起使用時
我們可以獲得一個顯示數據的高效方法
)
需要遠程傳輸的數據
然而
如果我們需要遠程傳輸數據的話則存在一個問題
這些快速而高效的
Reader
對象只在作為一個引用時才能被遠程傳輸
將一個DataReader作為引用傳送給一個客戶機時
DataReader仍還在服務器上
不過客戶機的應用程序也可以使用它
在這種情況下
我們實際上並沒有遠程傳輸數據
而是使用了一個遠程傳輸對象
在很多情況下都存在這種情況
要實現數據的遠程傳送
應該將數據寄存到一個能夠存儲(或保持)數據的對象中
並允許代碼不需進入數據存儲的額外行程就可以根據需要提取數據
並且多次讀取
在ADO
NET中
這個對象就是DataSet對象(或者DataTable對象)
當使用xml時
也有幾個對象供選擇
我們能夠遠程傳輸XmlDocument和XmlDataDocument對象
這兩個對象都有保持內容的能力
並且可以在一個應用程序的層之間進行傳送
四N層分布式數據處理架構模型 要進一步理解怎樣在應用程序中劃分不同的層
需要確定數據如何顯示以及是否需要更新數據和向服務器及時返回更新
全部在服務器上完成顯示
在客戶機上顯示數據
最常見的情形是在一組或者多組服務器上執行所有的數據處理
數據層和中間層限於服務器
客戶機只提供顯示接口
對於一個web浏覽器來說
通常的格式為html
對於一個蜂窩式電話或類似設備來說
可能是以wml格式表示
等等
下圖使用一個存儲過程或SQL語句來提取所需要的數據
然後用進行處理
或者執行一個web服務
另外
這裡也用xml片段的形式從數據存儲中提取數據
然後對數據進行處理並提供給客戶機
如果以xml文檔形式存儲數據
或者以這樣一種格式存儲數據
數據作為xml外置數據層
那麼我們就有一些其他的選擇
下圖顯示了怎樣提取和處理xml數據以便傳送給客戶機使用
此外
數據的提取其實就是借助一個
Reader
對象
並且可以使用不同的技術來處理數據並將數據提供給客戶機
擴展中間層
雖然數據的提取和處理經常在一個對象裡發生
比如一個Asp
Net頁面
但是為了有效利用由於使用基於組件的設計而提供的好處
通常需要提供更為精細的架構
我們應該有在顯示數據或者將其傳送給客戶機之前應用於數據的商務規則
換句話說
它可能是因為安全的原因
也可能是為了實現分布式處理
或者只是提供可重用性和使應用程序的維護更加容易
例如
應該有訪問一個數據存儲並提取一系列消費者的多個頁面
通過在一個獨立於頁面或其他提供數據給客戶機的對象的組件中建立這個過程
我們能夠提供一個提取數據的層
然後
我們在將來需要在某些方面改變數據存儲或者數據結構
或者改變訪問它的規則
我們只要用一個新的版本替換組件即可
只要組件的接口仍然未變
所有使用這個接口的應用程序將看到來自組件的相同輸出並和以前一樣繼續運行
然而
組件在內部用來提取和處理來自數據存儲的數據的方法可以根據需要進行相應修改
下圖示意了這種架構
顯然
該過程可以使用多個組件
如果數據的提取相當復雜
或者同一數據運用在多個地方的話
進一步分解數據處理(分解為更多組件層)就很有意義
例如
可用一個組件將數據當作一系列包含所有必須列的行(以關鍵字順序排列)
這個組件就可以成為其他以不同順序存儲數據的組件
或者僅外置數據的某些列的組件的數據源
移動數據處理到客戶機
一般地
要獲得發送給客戶機的數據
我們將利用客戶端腳本(JavaScript或 VBScript以及 WMLScript)
用Java或者一個特定平台的語言書寫的客戶端組件
或者用諸如Visual Basic
C++
Delphi等語言書寫的客戶端可執行程序等等
當然
所有我們需要的功能都是
Net Framework的一部分
(用戶可通過下載和安裝可重新分配的Framework(大約
MB)在客戶機上使用Framework)
因此
下面的示意圖顯示了一些用於實現獲得發送給客戶機的數據並在客戶機上進行處理的方法
將更新回送給服務器
在許多情況下
如果我們的要求就是以一種盡可能快速和高效的方式獲得發送給客戶機的依據
那麼
上面的示例能很好地完成任務
然而
許多應用程序要求客戶機將數據回送以更新數據存儲等操作時
就需要尋找更合理的模式
至少有三種方法用於向服務器端回送數據
一是回送Html表單和查詢字符串(實現方式與以前的ASP類似)
另一是客戶端組件(例如IE
及以上版本的XMLHTTP組件)
還有就是客戶端可執行的Windows表單應用程序和服務等
因此
應該有這樣一種情況
客戶機僅僅要求我們發送一些數據
並且我們讓客戶機完成所有的數據處理
也就是說
客戶機充當某種類型的服務
它將應用程序的數據作為自己的源數據來使用
然後在它的客戶機已經處理數據後將更改提交回來
一旦客戶端完成了數據更新
或者已經收集了用戶輸入的新數據
客戶機應用程序就以一種合適的格式打包數據(或者用正確的技術整理數據)
並將它提交給服務器進行處理和存儲
下圖顯示了利用
胖客戶機
來實現這種架構的方法
其中數據在客戶機上進行處理
然後經整理後返回給服務器來更新原始的數據存儲
仍然地
這不是一個包含所有可能性的圖表
回送數據的方法或許和發送數據的方法沒有什麼聯系
你應該根據應用程序的實際需求設計合適的模型
五結束語 建立可維護
可擴展的站點
開發高效率
高伸縮性的應用程序
實現跨平台
跨Internet的應用集成
創建N層分布式應用程序是擺在無數開發者面前的任務
傳統開發方式及技術面臨了困難
Net Framework推出的許多新技術為這些任務的實現提供了相對簡單的解決方案
其中
基於SOAP的Web Service在處理分布式應用時具有比傳統的DCOM/CORBA明顯的優點
結合基於Web的ASP
NET頁面開發技術和SQLServer數據存儲技術(或Xml文檔)
在
Net下開發N層應用程序也不再困難
From:http://tw.wingwit.com/Article/program/net/201311/11758.html