[英]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.