Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лр2_Сервис удаленного взаимодействия.doc
Скачиваний:
10
Добавлен:
13.08.2019
Размер:
680.45 Кб
Скачать

1.5. Создание консольного приложения клиента.

Создание приложения клиента удаленного объекта-поставщика автомобилей производим на основании опыта, приобретенного при выполнении предыдущей лабораторной работе. Для этого добавляем в наше решение новый проект консольного приложения клиента, в котором объявляем класс CarClient, включающей в себя функцию Main(), в соответствии со следующим листингом:

using System;

using System.Runtime.Remoting;

using System.Runtime.Remoting.Channels;

//using System.Runtime.Remoting.Channels.Http;

using System.Runtime.Remoting.Channels.Tcp;

using CarGeneralAsm;

using System.Collections.Generic;

namespace CarClient

{

class CarClient

{

static bool rad = false;//Переменная о вкл.\выкл. состоянии радиоприемника

//Статическая функцияпо выводу данных об автомобиле

private static void UseCar(JamesBondCar c)

{

Console.WriteLine("-> Имя: {0}", c.PetName);

Console.WriteLine("-> Максимальная скорость: {0}", c.MaxSpeed);

Console.WriteLine("-> Может двигаться под водой? : {0}",

c.GetSubmerge());

Console.WriteLine("-> Может летать? : {0}", c.GetFly());

Console.WriteLine();

c.TurnOnRadio(rad);

rad = !rad;

}

static void Main(string[] args)

{

Console.WriteLine("Клиент стартовал! Для продолжения нажмите на

клавишу ENTER");

// Конфигурирование клиента с помощью файла конфигурации

// RemotingConfiguration.Configure("CarProviderClient.exe.config",false);

TcpChannel c = new TcpChannel(); // Создание канала

ChannelServices.RegisterChannel(c, false);// Регистрация канала

// Получение ссылки на прокси удаленного объекта

object remoteObj = Activator.GetObject(typeof(CarGeneralAsm.CarProvider),

"tcp://localhost:32469/CarProvider.rem");

// Приведение ссылки на прокси к типу удаленного объекта.

CarProvider cp = (CarProvider)remoteObj;

// Получить автомобиль, стоящий первым в списке.

JamesBondCar qCar = cp.GetJBCByIndex(0);

// Получить весь список автомобилей.

List<JamesBondCar> allJBCs = cp.GetAllAutos();

// Вывести на экран информацию о первом автомобиле.

UseCar(qCar);

// Вывести на экран информацию обо всех автомобилях в списке

foreach(JamesBondCar j in allJBCs)

UseCar(j);

Console.ReadLine();

}

}

}

Теперь, при условии, что на вашей машине уже запущена разработанная ранее служба CarService, и наличии успешно скомпилированного проекта приложения клиента, можно запустить это приложение клиента и убедиться в том, что оно прекрасно работает с удаленным объектом. При этом следует заметить, что взаимодействие между приложениями клиентов и удаленным объектом организуется уже не приложением сервера, а созданной вами специально службой операционной системы Windows.

Внешний вид работающего приложения клиента показан на рис.6.

Рис.6. Внешний консольного приложения клиента под управлением службы CarSrvice для доступа к удаленному объекту поставщика автомобилей.