對象
分散式體系中,可遠程處理的對象主要有兩種:一是按值封送對象,它們被複製並傳出應用程式域;二是按引用封送對象,將為其創建代理,而該代理由客戶端用於遠程訪問對象。下面詳細介紹這兩種對象。
按值封送對象
對於按值封送(MarShal By value,MBV)對象而言,遠程處理系統創建這些對象的完整副本並將副本傳遞到進行調用的
應用程式域。一旦副本到達調用方的應用程式域內,對它的調用就是對該副本的直接調用。而且,當MBV對象作為參數傳遞時,也是通過值傳遞的。
只需要聲明它們的序列化規則,就可以將對象作為MBV對象。具體的方法有兩種:通過實現ISerializable接口來實現其自身的序列化;或者通過用serializableAtt舶ute修飾,該屬性通知系統自動序列化該對象),但是不擴展MarShalByRefobject。
遠程處理系統廣泛使用可序列化的對象。僅傳輸數據的對象通常是MBv對象。例如,實現了ISerializable接口的DataSet對象。
由於性能等方面的原因,將對象的完整狀態和任何可執行功能移動到目標應用程式域有意義時,應當使用MBV對象。這減少了跨網路、進程和應用程式域邊界的代價。
按引用封送的對象
按引用封送(MarShal By Reference,MBR)的對象是至少擴展System::MarshalByRefObiect的可遠程處理的對象。
當客戶端創建MBR對象的實例時,.NET遠程處理基礎結構在調用方中創建一個代理對象,客戶端將在該代理對象上進行調用;遠程處理封送這些調用,將它們傳送回起始應用程式域,並在實際對象上執行該調用。(如果客戶端位於與MBR對象相同的應用程式域中,基礎結構將向客戶端返回對該MBR對象的直接引用,從而避免封送處理的系統開銷。)
關鍵技術
1.偵聽
代理與占位程式(在.NET中稱為調度程式)將客戶或伺服器端的函式調用轉換成訊息,然後通過網路傳送。這叫作偵聽(Interc印tion),因為代理和調度程式截獲方法調用並將其傳送到遠程目的地。與CoM不同,由於元數據提供了相關的信息,所以CLR可以生成代理與占位程式,不需要自己編寫。
代理(proxy)將函式調用從棧結構上取出來,並將其轉換成一個訊息。這個訊息之後被傳送到它的目的地。調度程式接收這個訊息,並將其轉換到棧結構,這樣來完成對象的調用。
代理從發出調用的客戶的棧結構上取一個整數參數id,將其放入一個訊息中,該訊息編碼了這個調用及其參數。在伺服器端,調度程式接收該訊息,並在伺服器的棧上為UnregistersCustomer(int id)創建一個函式調用,然後產生對象的調用。客戶與伺服器代碼不需要知道它們進行了遠程處理。
2.信道與格式化程式
格式化程式(Formatter)將訊息轉換到一個
位元組流。.NET框架帶有兩個格式化程式,二進制與SOAP。轉換後的
位元組流通過
通信信道傳送出去。
雖然可以編寫自己的信道,但NET框架還是提供了兩個信道。HTTP信道使用HTIP協定,適用於在Internet 上或通過
防火牆進行通信。TCP信道使用TCP(sockets)協定,設計用於高速通信。格式化程式與運輸方法有四種排列:在
TCP上傳送二進制、在
HTTP上傳送
二進制、在HTTP上傳送
SOAP和在
TCP上傳送SOAP。
工作過程
當一個
客戶端調用另一個應用程式域內的某個對象的方法時,它首先由客戶應用程式域內的一個代理(pmxy)對象處理。這個代理是遠程對象在客戶應用程式域中的一個代理人,使客戶表現得仿佛“對象就運行於本機”似的。
CLR運用反射(reflection)來訪問正被訪問的遠程對象的
元數據,自動創建一個代理。請注意,這意味“內含遠程對象之類和,或接口”的程式集,必須也可在客戶機器上取得。
代理最終會將調用信息交給一個通道(channel)對象。這個通道對象負責使用某種適當機制,比如一個TCP連線(connection),將客戶的請求傳給遠程應用程式域。一旦這個請求到達目的地,運行於該處的一個通道對象便找出這個調用所要送達的目標對象(target object),如果彼時該對象尚未運行起來,就創建它並將此調用傳遞給該對象,後者執行這個調用,並通過相同的路徑傳回結果。
套用
可以想像,遠程處理的套用種類是很有限的.多數公司將利用現有的
通信網路來實現幾種不同的套用.為了突出
通信網的套用潛力,我們對一般的遠程處理套用作如下分類.
電子郵件。電子郵件通常與辦公自動化相聯繫。在電子郵件套用中,計算機是給公司內、外人員傳送訊息的一個工具。對整個單位的每個人員都分配一個電子郵政信箱,用以接收和存放訊息。通過一個電子標誌。來通知區域級經理有關的訊息。區域級經理可以要求將有關訊息顯示在視頻終端的顯示屏上,如果需要,還可以列印一份硬拷貝。
查詢/回答。在查詢/回答這類套用中,操作員(也可能是用戶經理)進行某種查詢,然後計算機(經由信息系統)作出回答。例如,人事經理可能要求查詢某個特定職工的培訓記錄。一個百貨公司銷售員可能要求查詢某個顧客的賒帳限度。
字處理。在字處理套用中,操作員利用軟體來進行正文處理。儘管當前多數的字處理是用一台單獨的設備來完成的,但是也有許多公司為了充分利用
資料庫而使用功能更強的主處理機的軟體來進行字處理。
數據錄入。經由通信網路可以從遠程地點直接將數據錄入到系統中。例如,銀行分行的出納員可以在每項銀行事務出現時,直接將它錄入系統。
數據收集。在有些情況下,將利用通信網路來收集數據。一個典型的例子是在一家百貨公司銷售網上各銷售點(POS)終端。在整個工作日中,每個銷售事務被自動記入一個計算機檔案。數據被收集和分批以供處理。過程控制。數據通信也被用在過程控制上。
遠程計算。通信網路給最終用戶提供了利用計算機進行計算的機會。在一個大公司的研究中心裡,通常有400個以上的工程師和科學家使用約15O台遠程終端進行科學或工程計算。
互動式程式設計。應用程式員或系統程式設計師以及用戶利用遠程終端直接訪問訓‘算機來編寫他們的程式。利用在線上調試輔助軟體和直接診斷程式將更容易進行程式的開發。
診斷估計。用戶工程師在遠程設備上定期使用診斷軟體來查出診斷軟體或機器錯誤的根源。