2011-12-07 67 views
0

是否有共享跨AppDomain界限的界面的方法?也就是說,我可以使用共享接口引用另一個AppDomain中的實例嗎?我知道可以在命名管道中使用WCF,但是我想知道是否有一種更直接(更簡單)的面向對象通信方式。跨應用程序域的通信

+0

您正在尋找良好的'.NET Remoting。 – leppie

+2

如果它是相同的過程,則不需要全面的遠程處理。只是一個MarshalByRef對象和AppDomain.CreateInstanceAndUnwrap將做的伎倆(http://msdn.microsoft.com/en-us/library/3c4f1xde.aspx) – Jeff

回答

2

您可以創建第二個AppDomain,並跨AppDomain邊界傳遞MarshalByRef對象(大概是繼承了您的接口)。簡單的例子是在這裏:

http://msdn.microsoft.com/en-us/library/3c4f1xde.aspx

的例子

所以:

AppDomain ad = AppDomain.CreateDomain("New domain"); 
    Worker remoteWorker = (Worker) ad.CreateInstanceAndUnwrap(
     Assembly.GetExecutingAssembly().FullName, 
     "Worker");   

remoteWorker是在比如在 「新領域」。調用域中的變量remoteWorker實際上是一個TransparentProxy,它將調用編組到另一個應用程序域中的實例。

+0

雖然AppDomains不共享內存空間,是嗎?我問,因爲我想用它作爲跨AppDomain邊界的互通方法。這種方法是簡單地在本地堆中創建一個實例還是跨邊界存在? – Jordan

+0

CreateInstanceAndUnwrap在目標域中創建一個實例(跨越邊界),並在調用域中爲它提供一個TransparentProxy引用。 – Jeff

+0

太棒了,謝謝。這正是我需要的。如果我通過接口方法傳遞共享類型,那麼它是序列化的還是通過引用傳遞的。如果你不知道,我是AppDomain的新手。 – Jordan