Иллюстрированный самоучитель по Architecture .NET

Активация. Пример удаленного объекта.

Объекты активизируются на стороне клиента одним из трех способов, используя класс Activator (Активатор, Модуль активизации).

  • Activator::GetObject используется для получения ссылки на активизированный сервером объект.
  • Activator::Createlnstance используется для создания активизированного пользователем объекта. Параметры для конструктора можно передать, используя один из перегруженных методов Createlnstance, который принимает массив объектов для передачи их конструктору.
  • Синтаксис оператора new (создать) языка C++ может использоваться для создания активизированного сервером или клиентом объекта. Для описания способа применения new (создать) используется конфигурационный файл.

Пример удаленного объекта

Для нашего примера удаленного доступа мы изолируем наш объект Customers (Клиенты) от сборки Customer (Клиент). В папке примера Remoting находятся два решения. Одно представляет собой клиентскую часть программы, другое – серверную. Сначала нужно скомпоновать серверную часть приложения. При этом также создастся Customer.dll. Необходимо скопировать эту динамически подключаемую библиотеку (DLL) в папку Debug (Отладка) для решений Server (Сервер) и Client (Клиент).

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

Отметим, что нужно было внести два простых изменения в наш объект. Класс Customers (Клиенты) в проекте сервера – удаленный (с возможностью удаленного доступа), – для этого мы сделали его производным от MarshalByRefObject.

public _gc class Customers:
// класс сборщика мусора Клиенты:
public MarshalByRefObject, public ICustomer

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

[Serializable]
// [Преобразуемый в последовательную форму]
public _value struct CustomerListltem
{
public:
int Customerld;
String *FirstName; // Строка
String *LastName; // Строка
String *EmailAddress; // Строка
};
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.