Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Построение общей сборки.






Сначала создадим общую сборку SimpleRemotingAsm.dll удаленного объекта сервера, на которую будут ссылаться как сервер, так и клиент. Для этого необходимо выполнить следующие действия:

1. С помощью меню: Файл=> Создать=> Проект в Visual Studio создать новое приложение в виде библиотеки с названием SimpleRemotingAsm.

2. В Solution Explorer нажать правой клавишей на модуле Class1.cs и выбрать команду Delete.

3. В Solution Explorer в проекте SimpleRemotingAsm ListServer нажать на правую клавишу и выбрать команду Add | AddClass.

4. Изменить название пространства имен на SimpleRemotingAsm.

4. Изменить объявление класса, породив его из класса MarshalByRefObject, чтобы можно было бы удаленно передавать на него ссылку и дать ему название RemoteMessageObject:

public class RemoteMessageObject: MarshalByRefObject

{

}

5. В классе RemoteMessageObject объявить конструктор по умолчанию:

public RemoteMessageObject()

{ Console.WriteLine(" Constructing RemoteMessageObject! "); }

и методы, один из которых принимает входную строку от клиента, а другой возвращает значение клиенту:

public void DisplayMessage(string msg)

{ Console.WriteLine(" Message is: {0}", msg); }

public string ReturnMessage()

{ return " Hello from the remote object! "; }

6. Добавить открытый метод Add(), возвращающий массив строк, определенный на

Теперь, с помощью владеющего приложения сервера (хоста), можно создать объект класса SimpleRemotingAsm для удаленного к нему доступа. Если существуют классы, из которых можно создавать объекты для удаленного к ним доступа, то все они должны быть порождены от класса MarshalByRefObject.

Замечание. Если класс должен принимать и передавать объекты в процессе вызова метода, то нужно использовать пользовательский атрибут < Serializable > для передачи этих объектов по значению или унаследовать от класса MarshalByRefObject для передачи по ссылке. Если класс уже унаследован от другого класса, то, поскольку множественное наследование в C# не разрешено, нужно создать родительский класс унаследованный от MarshalByRefObject.

Сборка SimpleRemotingAsm.dll определяет единственный MBR- тип по имени RemoteMessageObject, поддерживающий два общедоступных члена. Метод DisplayMessage () выводит в окно консоли сервера сообщение от клиента, а ReturnMessage () возвращает некоторое ответное сообщение клиенту. Вот полный код этой новой библиотеки классов C#:

namespace SimpleRemotingAsm

{

// Для этого типа при удаленном доступе

// будет использоваться маршалинг по ссылке (MBR)

public class RemoteMessageObject: MarshalByRefObject

{

public RemoteMessageObject()

{ Console.WriteLine(" Constructing RemoteMessageObject! "); }

// Метод принимает входную строку от клиента.

public void DisplayMessage(string msg)

{ Console.WriteLine(" Message is: {0}", msg); }

// Этот метод вернет значение клиенту.

public string ReturnMessage()

{ return " Hello from the server! "; }

}

}

Наиболее интересным здесь является то, что соответствующий тип получается из базового класса System.MarshalByRefObject, в результате чего полученный класс будет гарантировано доступным с помощью прокси на стороне клиента. Также следует обратить внимание на пользовательский (специальный) конструктор, заданный по умолчанию, который печатает сообщение при создании экземпляра этого типа. Теперь на основе этого кода, нужно создать сборку SimpleRemotingAsm.dll. Для этого необходимо скомпилировать проект и с помощью проводника убедиться, что в соответствующем каталоге (Bin\Debug) создана соответствующая DLL.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.