Асинхронное удаленное взаимодействие
Асинхронное удаленное взаимодействие
В завершение нашего обсуждения материала данной главы давайте выясним, как вызывать члены удаленного типа асинхронно. В главе 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.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Глава 16 Удаленное администрирование системы
Глава 16 Удаленное администрирование системы Средства удаленной регистрации, которые рассматривались в главах 13 и 14, позволяют пользователям запускать программы с удаленного компьютера. Эти инструменты можно использовать для регистрации в системе и управления ею.
4 Удаленное управление
4 Удаленное управление Проблемы удаленного управления компьютером считаются прерогативой администраторов, поэтому необходимость их рассмотрения в этой книге долго оставалась под вопросом. В конце концов я решил описать методы удаленного управления по той простой
9.4 Локальное и удаленное зеркальное отражение
9.4 Локальное и удаленное зеркальное отражение Зеркальное отражение уже упоминалось в разделе 9.1, но подробно не рассматривалось. Зеркальное отражение представляет собой процесс создания дубликата доступных данных, что позволяет обеспечить доступность данных при
Удаленное администрирование сервера TeamTalk
Удаленное администрирование сервера TeamTalk Когда мы устанавливали сервер TeamTalk у себя на компьютере, для того чтобы иметь возможность общаться в своей локальной сети, то разрешили так называемое удаленное администрирование. Теперь самое время более подробно рассказать о
Удаленное использование
Удаленное использование В окне Панель управления дважды щелкаем на значке Система. В открывшемся окне переходим на вкладку Удаленное использование (рис. 4.4). Рис. 4.4. Удаленное использование.В области Удаленный помощник снимаем флажок Разрешить отправку приглашения
Удаленное управление компьютером
Удаленное управление компьютером Администратору локальной сети, в чьи обязанности входит обеспечение стабильной работы компьютеров, часто приходится бегать от одного пользователя, у которого что-то не получается, к другому. Перемещаясь от одной рабочей станции к
Удаленное шифрование данных
Удаленное шифрование данных В отличие от перечисленных выше схем выманивания денежных средств через Интернет, которые больше напоминают элементарный «развод» или «кидалово», описываемый в этом разделе способ интернет-мошенничества относится к разряду «продвинутых» и
Инсталляция приложения, использующего удаленное взаимодействие
Инсталляция приложения, использующего удаленное взаимодействие Хватит акронимов! К этому моменту вы почти готовы к построению своего первого .NET-приложения, использующего удаленное взаимодействие. Но перед тем, как это сделать, мы должны обсудить одну деталь: процедуру
Тестирование приложения, использующего удаленное взаимодействие
Тестирование приложения, использующего удаленное взаимодействие При тестировании приложения начните с запуска серверного приложения, которое откроет HTTP-канал и зарегистрирует объект RemoteMessageObject для удаленного доступа. Затем запустите экземпляр приложения клиента.
7.6. Асинхронное решение с помощью GCD задач, не связанных с пользовательским интерфейсом
7.6. Асинхронное решение с помощью GCD задач, не связанных с пользовательским интерфейсом Постановка задачи Необходимо иметь возможность решать задачи, не связанные с пользовательским интерфейсом, с помощью
7.12. Асинхронное выполнение задач с помощью операций
7.12. Асинхронное выполнение задач с помощью операций Постановка задачи Требуется параллельно выполнять
3.4.4. Асинхронное удаление дочерних процессов
3.4.4. Асинхронное удаление дочерних процессов Если дочерний процесс просто вызывает другую программу с помощью функции exec(), то в родительском процессе можно сразу же вызвать функцию wait() и пассивно дожидаться завершения потомка. Но очень часто нужно, чтобы родительский
Асинхронное прослушивание
Асинхронное прослушивание Прежде чем вы сможете использовать функцию сигнализации API isc_que_evento, вам нужно выполнить функцию обратного вызова на клиенте, которую вызывал бы сервер при посылке события. Названием для такого типа функции является асинхронный перехват, или
Удаленное управление
Удаленное управление Управляться со своим собственным компьютером умеет не каждый. Ну а если вам вдруг понадобиться изменить что-то на ЧУЖОМ компьютере? Причем находящемся черте-где, возможно даже в другом городе?А это бывает не так уж редко. К примеру, нужно помочь
ТЕМА НОМЕРА: Удаленное присутствие
ТЕМА НОМЕРА: Удаленное присутствие Автор: Леонид Левкович-МаслюкАвтобус чинно проплывает по неожиданно безлюдным и безмашинным улицам субботнего Мюнхена, выезжает на трассу, ведущую в горы, в трогательном согласии с дорожными знаками набирает скорость. До знаменитого