клиента:

Удаленные объекты

Удаленные объекты требуются для распределенного вычисления. Объект, вызываемый удаленно с другой системы, выводится из объектов System.MarshalByRefObject.MarshalByRefObject и соответствует домену приложения, в котором они создаются. Это означает, что такие объекты никогда не переходят между доменами приложений; вместо этого используется объект прокси для доступа к удаленному объекту изнутри другого домена приложения. Другой домен приложения может существовать внутри того же процесса, другого процесса, или на другой системе.

Удаленный объект имеет распределенную идентичность. В связи с этим ссылка на объект может передаваться другим клиентам, и они также будут получать доступ к тому же объекту. Прокси знает об идентичности удаленного объекта.

Класс MarshalByRefObject имеет в дополнение к унаследованным методам из класса Object методы для инициализации и получения служб времени жизни. Службы времени жизни определяют, как долго живут удаленные объекты. Службы времени жизни и арендуемые свойства будут рассмотрены позже в этой главе.

Чтобы увидеть .NET Remoting в действии, создается простая библиотека классов для удаленного объекта. Класс Hello выводится из System.MarshalByRefObject. В конструкторе и деструкторе на консоли записывается сообщение, чтобы было известно о времени жизни объекта. Кроме того, имеется только один метод Greeting(), который будет вызываться от клиента.

Для того чтобы легко различать в последующих разделах сборку и класс, дадим им различные имена аргументов, которые используют вызовы метода. Присвоим сборке имя RemoteHello.dll, а классу — Hello. Типом проекта Visual Studio.NET, используемым для этого класса, является Visual C# Class Library:

namespace Wrox.ProfessionalCSharp {

 using System;

 /// <summary>

 /// Краткое описание Class1

 /// </summary>

 public class Hello: System.MarshalByRefObject {

  public Hello() {

   Console.WriteLine('Constructor called');

  }

  ~Hello() {

   Console.WriteLine('Destructor called');

  }

  public string Greeting(string name) {

   Console.WriteLine('Greeting called');

   return 'Hello, ' + name;

  }

 }

}

Простой сервер

Для сервера используется консольное приложение C#. Для применения класса TcpServerChannel необходимо сослаться на сборку System.Runtime.Remoting.dll. Также требуется, чтобы мы ссылались на созданную ранее сборку RemoteHello.dll.

В методе Main() создается объект System.Runtime.Remoting.Channel.Тcр.TcpServerChannel с портом номер 8086. Этот канал регистрируется в классе System.Runtime.Remoting.Channels.ChannelServices, чтобы сделать его доступным для удаленных объектов. Тип удаленного объекта регистрируется с помощью System.Runtime.Remoting.RemotingConfiguration.RegisterWellKnownServiceType. Здесь определяется тип класса в удаленном объекте, используемый клиентом URI, и режим. Режим WellKnownObject.SingleCall означает, что для каждого вызова метода создается новый экземпляр, мы не храним состояние в удаленном объекте.

После регистрации удаленного объекта продолжим выполнение сервера, пока не будет нажата клавиша:

using System;

using System.Runtime.Remoting;

using System.Runtime.Remoting.Channels;

using System.Runtime.Remoting.Channels.Tcp;

namespace Wrox.ProfessionalCSharp {

 /// <summary>

 /// Краткое описание Class1

 /// </summary>

 public class HelloServer {

  public static void Main(string[] args) {

   TcpServerChannel channel = new TcpServerChannel(8086);

   ChannelServices.RegisterChannel(channel);

   RemotingConfiguration.RegisterWellKnownServiceType(

    typeof(Hello), 'Hi', WellKnownObjectMode.SingleCall);

   System.Console.WriteLine('hit to exit');

   System.Console.ReadLine();

  }

 }

}

Простой клиент

Клиент также является консольным приложением C#. И здесь делается ссылка на сборку System.Runtime.Remoting.dll, чтобы можно было использовать класс TcpClientChannel. Кроме того, имеется ссылка на сборку RemoteHello.dll. Хотя объект будет создаваться на удаленном сервере, нам понадобится сборка на стороне клиента, чтобы прокси прочитал метаданные во время выполнения.

В клиентской программе создается объект TcpClientChannel, который регистрируется в

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ОБРАНЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату