在分布系統中,遠端物件需要跨越應用程式域進行傳遞,因此其表示方式會有所不同。基於效能和資料共享等原因考慮,remoting 中遠端物件可以是 "值封送物件(mbv)" 或 "引用封送物件(mbr)"。
mbv 機制類似於 web 無狀態請求,伺服器建立物件例項傳遞給通道傳送到客戶端,而後伺服器端不再繼續維護其狀態和生存期。而 mbr 則在其生存期內一直存活在伺服器程式域中,客戶端只是通過**物件來完成呼叫訊息傳遞,客戶端可以通過相關介面來延長遠端物件的生存期。
實現 mbv 一般通過 serializableattribute 特性,或者實現 iserializable 介面。執行下面的例子,我們會發現遠端物件在客戶端程式域內,並且不是**物件。
using system;
using system.collections;
using system.collections.generic;
using system.reflection;
using system.runtime.serialization;
using system.runtime.serialization.formatters;
using system.runtime.serialization.formatters.binary;
using system.runtime.compilerservices;
using system.runtime.remoting;
using system.runtime.remoting.channels;
using system.runtime.remoting.channels.tcp;
using system.runtime.remoting.messaging;
namespace learn.library.remoting
static void main()}}
輸出:data in learn.cui.vshost.exe
false
mbr 則要求繼承自 marshalbyrefobject 或 contextboundobject。繼承自 contextboundobject 的遠端物件,可以包含其執行上下文,比如事務等等,其效能不如 marshalbyrefobject。下面的例子中,遠端物件依舊在伺服器程式域內執行,客戶端只是乙個**物件在**呼叫。
using system;
using system.collections;
using system.collections.generic;
using system.reflection;
using system.runtime.serialization;
using system.runtime.serialization.formatters;
using system.runtime.serialization.formatters.binary;
using system.runtime.compilerservices;
using system.runtime.remoting;
using system.runtime.remoting.channels;
using system.runtime.remoting.channels.tcp;
using system.runtime.remoting.messaging;
namespace learn.library.remoting
static void main()}}
輸出:data in server
true
mbv 傳遞完整的副本到客戶端,而後的所有呼叫都是在客戶端程式域內進行,不再需要跨域的往返過程。但完整複製和序列化需要更多的資源和往返時間,因此不適合較大的物件,同時無法在多個客戶端間共享資訊。而 mbr 的所有呼叫都是通過**進行的,因此往返過程比較多,但因執行過程都在伺服器端進行,其整體效能還是非常高的。在系統設計時可以針對不同的應用採取不同的選擇。
Remoting 二 遠端物件
在分布系統中,遠端物件需要跨越應用程式域進行傳遞,因此其表示方式會有所不同。基於效能和資料共享等原因考慮,remoting 中遠端物件可以是 值封送物件 mbv 或 引用封送物件 mbr mbv 機制類似於 web 無狀態請求,伺服器建立物件例項傳遞給通道傳送到客戶端,而後伺服器端不再繼續維護其狀態...
Remoting程式設計知識二
一 如何使用iis作為啟用 net remoting和dcom之間的乙個區別是前者不支援自動執行的伺服器程序。需要人工啟動伺服器程序來註冊用來遠端啟用的類和監聽請求。而對於dcom,當遠端客戶端呼叫cocreateinstanceex或者其他啟用api時,會自動執行伺服器程序。net remotin...
Remoting遠端處理事件呼叫的問題
remoting遠端處理事件呼叫的問題 title 在.net remoting技術中可以遠端進行事件通知,但是我在使用時發現問題,提示資訊為 不允許型別 system.delegateserializationholder 和從中派生的型別 例如 system.delegateserializat...