共用方式為


.NET 遠端處理架構

.NET 遠端處理基礎結構是處理序間通訊的抽象方法。許多系統的運作並不需注意到其本身。例如,可藉由傳值 (By Value) 方式傳遞或複製的物件,會自動在不同應用程式定義域或不同電腦上的應用程式間傳遞。您只需要將自訂類別標示為可序列化即可進行這項工作。

但是,遠端處理系統最重要的功能,在於它能夠使不同應用程式定義域中的物件或使用不同傳輸通訊協定、序列化格式、物件存留期配置和物件建立模式的處理序中的物件,彼此相互通訊。此外,遠端處理能夠以任何理由介入大部份通訊處理序的任一階段。

不論您是否已實作許多分散式應用程式,或只是想要將元件移到其他電腦,以增加程式的延展性,都很容易瞭解到,做為具有某些預設實作的處理序間通訊的泛用系統,遠端處理系統能夠輕易地處理大部份的案例。以下先就使用遠端處理進行處理序間通訊的基本原理開始討論。

複本和參考的比較

跨處理序 (Cross-Process) 通訊需要:將功能提供給其處理序之外之呼叫端的伺服器物件、在伺服器物件上發出呼叫的用戶端以及將呼叫從某一端運送至另一端的傳輸機制。伺服器方法的位址在某一處理序中是合於邏輯且運作正確的,但在不同的用戶端處理序中則不一定正確。若要減少這個問題,用戶端可以在呼叫伺服器物件時,產生整個物件的複本,並將複本移動至用戶端處理序,以便直接叫用複本的方法。

但是許多物件無法或不應該複製或移動到某些其他處理序來執行。含有許多方法的極大物件,要複製或以傳值的方式傳遞到其他處理序,可能十分不容易。通常,用戶端僅需要伺服器物件上某一個或某些方法所傳回的資訊。複製整個伺服器物件,包括大量的內部資訊或與用戶端需求無關的可執行結構,將會浪費頻寬以及用戶端記憶體和處理時間。此外,許多物件公開 (Expose) 公用 (Public) 的功能,但卻需要私用的 (Private) 資料在內部執行。複製這些物件可能造成未經授權的用戶端能夠檢查內部資料,而產生潛在的安全性問題。最後,某些物件所使用的資料,無法以可瞭解的方式複製。例如,FileInfo 物件,包含作業系統檔案的參考,具有伺服器處理序記憶體中的唯一位址。您可以複製這個位址,但在其他處理序中一點意義也沒有。

在這種情況下,伺服器處理序應將伺服器物件的參考傳遞給用戶端處理序,而不是傳遞物件的複本。用戶端可利用這個參考呼叫伺服器物件。這些呼叫不會在用戶端處理序中執行。而是,遠端處理系統收集所有呼叫相關的資訊,將此資訊傳送至伺服器處理序進行解譯,找出正確的伺服器物件,並代表用戶端物件呼叫伺服器物件。接下來,呼叫結果會送回用戶端處理序,以便傳回用戶端。頻寬僅用於重要的資訊 - 呼叫、呼叫引數以及任何傳回值或例外狀況 (Exception)。

簡化的遠端處理架構

使用物件參考來溝通伺服器物件和用戶端,是遠端處理的核心。遠端處理架構為程式設計人員提供一個更簡單的程序。如果您的用戶端設定正確,只需要使用 new (或是 Managed 程式語言的執行個體建立功能) 來建立遠端物件的新執行個體 (Instance)。用戶端接收到伺服器物件的參考後,就可以呼叫它的方法,就像物件是在您的處理序中一樣而不是在不同的電腦上執行。遠端處理系統使用 Proxy 物件建立伺服器物件是在用戶端處理序中的效果。Proxy 是替代物件,將它們自己表示為其他物件。當您的用戶端建立遠端型別的執行個體時,遠端基礎結構會建立 Proxy 物件,對您的用戶端來說,該物件看起來完全像是遠端型別。您的用戶端呼叫該 Proxy 上的方法,而遠端處理系統接收到呼叫、將它傳送到伺服器處理序、叫用伺服器物件並將傳回值送回用戶端 Proxy,而 Proxy 會將結果傳回用戶端。

遠端呼叫必須以某種方式在用戶端和伺服器處理序之間傳遞。如果您本身建置遠端處理系統,您可能一開始會學習網路程式設計和各式各樣的通訊協定和序列化格式規格。在 .NET 遠端處理系統中,開啟網路連接和使用特定通訊協定將位元組傳送至接收應用程式的基礎技術組合,是以傳輸通道為代表。

通道是一種型別,可承載資料的資料流、根據特定網路通訊協定建立封裝 (Package),並將封裝傳送至其他電腦。某些通道只能接收資訊,有些通道只能傳送資訊,另一些通道,例如預設的 TcpChannelHttpChannel 類別,兩個方向都可使用。

雖然伺服器處理序瞭解每一獨特型別的所有細節,而用戶端只知道它需要另一應用程式定義域中或可能是另一台電腦上的某一個物件參考。URL 從伺服器應用程式定義域之外的世界,找到物件。對外在世界而言,代表獨特型別的 URL 是指啟動過程 URL,這個 URL 可確保您的遠端呼叫傳送給正確的型別。如需詳細資訊,請參閱啟動過程 URL

完整的遠端處理系統設計

假設您有應用程式在某一台電腦上執行,而您希望使用儲存在另一台電腦上的型別來公開這個功能。下圖顯示一般的遠端處理程序。

遠端處理程序

如果兩端的關係都設定正確,用戶端僅需要建立伺服器類別的新執行個體即可。遠端處理系統建立代表類別的 Proxy 物件,並將 Proxy 的參考傳回用戶端物件。當用戶端呼叫方法時,遠端處理基礎結構會處理呼叫、檢查型別資訊並藉由通道將呼叫傳送至伺服器處理序。聆聽 (Listen) 的通道取得要求並轉寄至伺服器遠端處理系統,系統找出 (或視需要建立) 並呼叫所要求的物件。接著反向處理序,這時伺服器遠端處理系統會將回應包梱至從伺服器通道傳送至用戶端通道的訊息中。最後,用戶端遠端處理系統透過 Proxy 將呼叫結果傳回用戶端物件。

執行這項工作實際上只需要很少的程式碼,但必須思考一下它們關係的設計和組態方式。可能程式碼完全正確但仍執行失敗,只因為 URL 或通訊埠編號錯誤。如需詳細資訊,請參閱組態

雖然遠端處理序的高階概觀相當的簡單易懂,但低階的細節可能相當的複雜。其他主題中有更深入地討論到遠端處理的主要項目,請見以下各主題。

請參閱

.NET 遠端處理概觀 | 界限:處理序和應用程式領域 | 可遠端處理和不可遠端處理的物件 | 物件啟動過程和存留期 | 通道 | 安全性 | 組態