前提:遠端物件類別需存在於客戶端本機(供 .NET Remoting 基礎結構代理解序列化)。
TcpChannel channel = new TcpChannel();
ChannelServices.RegisterChannel(channel);
Activator.GetObject 取得遠端物件 Proxy:
MyCoolObject obj = (MyCoolObject)Activator.GetObject(
typeof(MyCoolObject),
"tcp://localhost:8085/MyCoolObject"
);
參數一:遠端類別型別;參數二:遠端物件 URL(含通道協定、主機、埠、物件名)。取得後可視為本地物件呼叫方法。
TaskRunner 物件部署於伺服器,客戶端取得 Proxy 後可提交任務。核心契約:
public interface ITask {
object Run(); // 執行任務,回傳結果物件
string Identify(); // 任務識別描述
}
客戶端實作 ITask、標記 [Serializable],將含業務邏輯與資料的任務物件「按值傳遞」送至伺服器,在伺服器應用程式域執行。適用場景:
範例:計算 3000 位數圓周率、大數運算、加密/壓縮/排序等密集運算任務。
物件跨應用程式域傳遞需序列化為位元組流,再於目標端反序列化還原。實作方式:
[Serializable]
class ClientTask { /* 完整任務邏輯與資料 */ }
注意:物件引用的外部組件(DLL)亦需可序列化,否則遠端端無法重建完整物件圖。
csc /target:library /out:ITask.dll ITask.cs
csc /target:library /out:TaskRunner.dll TaskRunner.cs
csc /r:ITask.dll /r:TaskRunner.dll TaskServer.cs
csc /r:ITask.dll /r:TaskRunner.dll TaskClient.cs
TaskServer.exe,等待提示 [i] Task Server Started, press <Enter> to exit?TaskClient.exe,提交任務至伺服器執行並取回結果。範例客戶端任務:實作 ITask 計算兩數乘積並回傳 int。開發者可自行擴充任務類型,體驗分散式計算將複雜運算卸載至伺服器的強大威力。