簡體   English   中英

.NET遠程處理中的困惑

[英]Confusion in .net Remoting

我正在學習.net遠程處理

我已經閱讀了MSDN,但在第一步中,我面臨一些困惑。

遠程處理需要三個步驟。

1- 遠程對象

2- 主機

3- 客戶

創建RemoteObject和Host很好。 我了解所有情況,它使用配置文件進行主機和客戶端配置。 在客戶端中,它使用以下代碼

public static void Main(){
      RemotingConfiguration.Configure("Client.exe.config");
      RemotableType remoteObject = new RemotableType();
      Console.WriteLine(remoteObject.SayHello());
   }

在這里,它使用新的運算符創建RemotableType對象。 其中,此客戶端應用程序具有RemotableType.dll引用。

如果該dll在本地可用,那么遠程調用SayHello()的目的是什么?

我在不運行服務器的情況下運行了此客戶端,它仍顯示我Hello World消息。

使用new運算符創建的remoteObject在這里有效嗎?

另一種獲取遠程對象的方法是:

RObject remoteObject = (RObject)Activator.GetObject(typeof(RObject), "tcp://localhost:9999/RObject");

調用new RemotableType()只是在客戶端上創建RemotableType的本地實例。 對其調用任何方法都將在此實例上被調用。

使用Activator.GetObject()在客戶端中為在主機應用程序中發布的RemotableType實例創建一個TransparentProxy。 調用此方法的任何方法都將遠程調用宿主應用程序並在該處執行。 如果您的SayHello實現是返回入口程序集的名稱(使用Assembly.GetEntryAssembly()),則即使您在客戶端中運行,它也會返回Host.exe。

通常,您將創建兩個DLL:一個包含可遠程對象的接口定義,另一個包含接口定義的實現。

然后,您將接口定義DLL添加到客戶端,而服務器需要兩個DLL。 然后,客戶端將使用Activator.GetObject(...)調用創建該類的實例。

如您所指出的,如果您從客戶端引用實現DLL,則從客戶端/服務器實現中不會獲得任何好處。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM