Путаница в .net Remoting - PullRequest
       9

Путаница в .net Remoting

0 голосов
/ 09 июня 2009

я учусь .net Remoting

Я прочитал из MSDN, но в один шаг я столкнулся с некоторой путаницей ..

Для удаленного взаимодействия требуется три шага.

1 - RemoteObject

2 - Хост

3 - Клиент

создание RemoteObject и Хост в порядке. Я все понимаю, он использует файл конфигурации для конфигурации хоста и клиента. В клиенте он использует следующий код

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

Здесь создается объект RemotableType с новым оператором. Где, как это клиентское приложение имеет ссылку RemotableType.dll.

Когда это dll доступно локально, тогда какова цель вызова SayHello () удаленно?

Я запустил этот клиент без запуска сервера, и он все еще отображает мне сообщение Hello World.

Действительно ли это создание объекта remoteObject с новым оператором здесь?

Где другой метод получения удаленного объекта:

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

Ответы [ 2 ]

0 голосов
/ 09 июня 2009

Обычно вы создаете две библиотеки DLL: одну, содержащую определения интерфейса для вашего удаленного объекта, и другую, содержащую реализацию определений интерфейса.

Затем вы добавите DLL определения интерфейса к клиенту, в то время как серверу нужны обе DLL. Затем клиент создаст экземпляры класса, используя вызов Activator.GetObject(...).

Если вы ссылаетесь на библиотеку реализации с вашего клиента - как вы указали - у вас нет никаких преимуществ от реализации клиент / сервер.

0 голосов
/ 09 июня 2009

Вызов нового RemotableType () просто создает локальный экземпляр RemotableType на клиенте. Вызов любых методов будет вызван в этом экземпляре.

Использование Activator.GetObject () создает TransparentProxy в клиенте для экземпляра RemotableType, который был опубликован в хост-приложении. Вызов любых методов этого сделает удаленный вызов к хост-приложению и будет выполняться там. Если ваша реализация SayHello должна была вернуть имя записи сборки (используя Assembly.GetEntryAssembly ()), она вернула бы Host.exe, даже если вы работаете в клиенте.

...