(zzfrom:
乙個應用程式域可以通過兩種方式和另乙個應用程式域進行通訊。一種是傳值(by value),另一種是傳引用(by reference)
傳值是通過物件的序列和反序列實現的,因此要傳遞的物件必須有system.serializable屬性.
它的實現原理:我們在應用程式域a中構造了乙個物件a1,現在要將物件a1的引用傳遞給另
乙個應用程式域b,clr首先會將物件a1的字段序列化到乙個記憶體塊,然後再將這個記憶體塊的位址
傳遞給另一應用程式域b,將由應用程式域b反序列化得對新的物件b1,因此這個新的物件b1應該是在
應用程式域a中。
可以通過以下**來證實:
using system;
using system.reflection;
using system.threading;
using system.runtime.serialization;
test test = (test) domain.createinstanceandunwrap(
assembly.getcallingassembly().fullname, "test");
而傳引用則能過建立**物件來實現,傳遞的物件要從system.marshalbyrefobject類繼承。
當物件的引用傳遞到另一應用程式域中時,clr會在目的應用程式域中建立乙個**物件,
目的應用程式域中引用的將是這個**物件,它通過**物件來呼叫源應用程式域中的物件。
由於它實際上呼叫的還是源應用程式域中的物件,因此執行緒要在兩個應用程式域中跳轉。
關於跨應用程式域邊界的物件訪問
乙個應用程式域可以通過兩種方式和另乙個應用程式域進行通訊。一種是傳值 by value 另一種是傳引用 by reference 傳值是通過物件的序列和反序列實現的,因此要傳遞的物件必須有system.serializable屬性.它的實現原理 我們在應用程式域a中構造了乙個物件a1,現在要將物件a...
翻譯 應用程式池和應用程式域的區別
應用程式域是asp.net的概念,它為每個asp.net應用程式提供隔離。應用程式池是iis的概念,它提供在程序級別的隔離。應用程式域僅對asp.net應用程式可用。應用程式池對asp.net和非asp.net應用程式都可用。每個asp.net應用程式有它自己的應用程式域。乙個應用程式池可以被多個應...
翻譯 應用程式池和應用程式域的區別
應用程式域是asp.net的概念,它為每個asp.net應用程式提供隔離。應用程式池是iis的概念,它提供在程序級別的隔離。應用程式域僅對asp.net應用程式可用。應用程式池對asp.net和非asp.net應用程式都可用。每個asp.net應用程式有它自己的應用程式域。乙個應用程式池可以被多個應...