Асинхронное удаленное взаимодействие

Асинхронное удаленное взаимодействие

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

Для примера создайте новое консольное приложение (AsyncWKOCarProvider-Client) и установите в нем ссылку на первый вариант компоновочного блока CarGeneralAsm.dll. Теперь измените класс Program так, как показано ниже:

class Program {

 // Делегат для метода GetAllAutos().

 internal delegate List‹JamesBondCar› GetAllAutosDelegate();

 static void Main(string[] args) {

  Console.WriteLine("Старт клиента! Для завершения нажмите ‹Enter›");

  RemotingConfiguration.Configure("AsyncWKOCarProviderClient.exe.config");

  // Создание поставщика машин.

  CarProvider cp = new CarProvider();

  // Создание делегата.

  GetAllAutosDelegate getCarsDel = new GetAllAutosDelegate(cp.GetAllAutos);

  // Асинхронный вызов GetAllAutos().

  IAsyncResult ar = getCarsDel.BeginInvoke(null, null);

  // Имитация активности клиента.

  while (!ar.IsCompleted) { Console.WriteLine("Клиент работает…"); }

  // Все сделано! Получение возвращаемого значения делегата.

  List‹JamesBondCar allJBCs = getCarsDel.EndInvoke(ar);

  // Использование всех машин из списка.

  foreach(JamesBondCar j in allJBCs) UseCar(j);

  Console.ReadLine();

 }

}

Здесь приложение клиента сначала объявляет делегат, соответствующий сигнатуре метода GetAllAutos() удаленного типа CarProvider. После создания делегата имя вызываемого метода (GetAllAutos) передается ему, как обычно. Потом запускается метод BeginInvoke(), сохраняется результирующий интерфейс IAsyncResult и имитируется какая-то работа на стороне клиента (напомним, что свойство IAsyncResult.IsCompleted позволяет выяснить, завершил ли работу соответствующий метод). После завершения работы клиента вы получаете список List‹›, возвращенный методом CarProvider.GetAllAutos() в результате вызова члена EndInvoke(), и передаете каждый объект JamesBondCar статической вспомогательной функции с именем UseCar().

public static void UseCar(JamesBondCar j) {

 Console.WriteLine("Может ли машина летать"? {0}", j.isFlightWorthy);

 Console.WriteLine("Может ли машина плавать? {0}", j.isSeaWorthy);

}

Снова подчеркнем, что красота использования типа делегата .NET заключается в том, что форма асинхронного вызова удаленных методов оказывается аналогичной форме вызова локальных методов.

Исходный код. Проект AsynсWKOCarProviderClient размещен в подкаталоге, соответствующем главе 18.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

ТЕМА НОМЕРА: Удаленное присутствие

Из книги Журнал «Компьютерра» № 18 от 15 мая 2007 года автора Журнал «Компьютерра»

ТЕМА НОМЕРА: Удаленное присутствие Автор: Леонид Левкович-МаслюкАвтобус чинно проплывает по неожиданно безлюдным и безмашинным улицам субботнего Мюнхена, выезжает на трассу, ведущую в горы, в трогательном согласии с дорожными знаками набирает скорость. До знаменитого


Удаленное управление компьютером

Из книги 200 лучших программ для Интернета. Популярный самоучитель автора Краинский И

Удаленное управление компьютером Администратору локальной сети, в чьи обязанности входит обеспечение стабильной работы компьютеров, часто приходится бегать от одного пользователя, у которого что-то не получается, к другому. Перемещаясь от одной рабочей станции к


4 Удаленное управление

Из книги Удаленная работа на компьютере: как работать из дома комфортно и эффективно автора Клименко Роман Александрович

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


Инсталляция приложения, использующего удаленное взаимодействие

Из книги Установка и настройка Windows XP. Легкий старт автора Донцов Дмитрий

Инсталляция приложения, использующего удаленное взаимодействие Хватит акронимов! К этому моменту вы почти готовы к построению своего первого .NET-приложения, использующего удаленное взаимодействие. Но перед тем, как это сделать, мы должны обсудить одну деталь: процедуру


Тестирование приложения, использующего удаленное взаимодействие

Из книги 300 лучших программ на все случаи жизни автора Леонтьев Виталий Петрович

Тестирование приложения, использующего удаленное взаимодействие При тестировании приложения начните с запуска серверного приложения, которое откроет HTTP-канал и зарегистрирует объект RemoteMessageObject для удаленного доступа. Затем запустите экземпляр приложения клиента.


Удаленное использование

Из книги Серверные технологии хранения данных в среде Windows® 2000 Windows® Server 2003 автора Дайлип Наик

Удаленное использование В окне Панель управления дважды щелкаем на значке Система. В открывшемся окне переходим на вкладку Удаленное использование (рис. 4.4). Рис. 4.4. Удаленное использование.В области Удаленный помощник снимаем флажок Разрешить отправку приглашения


Удаленное управление

Из книги Сетевые средства Linux автора Смит Родерик В.

Удаленное управление Управляться со своим собственным компьютером умеет не каждый. Ну а если вам вдруг понадобиться изменить что-то на ЧУЖОМ компьютере? Причем находящемся черте-где, возможно даже в другом городе?А это бывает не так уж редко. К примеру, нужно помочь


9.4 Локальное и удаленное зеркальное отражение

Из книги Мошенничество в Интернете. Методы удаленного выманивания денег, и как не стать жертвой злоумышленников автора Гладкий Алексей Анатольевич

9.4 Локальное и удаленное зеркальное отражение Зеркальное отражение уже упоминалось в разделе 9.1, но подробно не рассматривалось. Зеркальное отражение представляет собой процесс создания дубликата доступных данных, что позволяет обеспечить доступность данных при


Глава 16 Удаленное администрирование системы

Из книги Бесплатные разговоры через Интернет автора Фрузоров Сергей

Глава 16 Удаленное администрирование системы Средства удаленной регистрации, которые рассматривались в главах 13 и 14, позволяют пользователям запускать программы с удаленного компьютера. Эти инструменты можно использовать для регистрации в системе и управления ею.


Удаленное шифрование данных

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

Удаленное шифрование данных В отличие от перечисленных выше схем выманивания денежных средств через Интернет, которые больше напоминают элементарный «развод» или «кидалово», описываемый в этом разделе способ интернет-мошенничества относится к разряду «продвинутых» и


Удаленное администрирование сервера TeamTalk

Из книги Программирование для Linux. Профессиональный подход автора Митчелл Марк

Удаленное администрирование сервера TeamTalk Когда мы устанавливали сервер TeamTalk у себя на компьютере, для того чтобы иметь возможность общаться в своей локальной сети, то разрешили так называемое удаленное администрирование. Теперь самое время более подробно рассказать о


Асинхронное прослушивание

Из книги iOS. Приемы программирования автора Нахавандипур Вандад

Асинхронное прослушивание Прежде чем вы сможете использовать функцию сигнализации API isc_que_evento, вам нужно выполнить функцию обратного вызова на клиенте, которую вызывал бы сервер при посылке события. Названием для такого типа функции является асинхронный перехват, или


3.4.4. Асинхронное удаление дочерних процессов

Из книги автора

3.4.4. Асинхронное удаление дочерних процессов Если дочерний процесс просто вызывает другую программу с помощью функции exec(), то в родительском процессе можно сразу же вызвать функцию wait() и пассивно дожидаться завершения потомка. Но очень часто нужно, чтобы родительский


7.6. Асинхронное решение с помощью GCD задач, не связанных с пользовательским интерфейсом

Из книги автора

7.6. Асинхронное решение с помощью GCD задач, не связанных с пользовательским интерфейсом Постановка задачи Необходимо иметь возможность решать задачи, не связанные с пользовательским интерфейсом, с помощью