- •Тверской государственный технический университет
- •Построение Windows сервиса.
- •1. Теоретическая часть.
- •1.1. Альтернативные хосты для удаленных объектов
- •1.2. Хостинг удаленных объектов с использованием службы Windows
- •1.3. Построение сборки удаленных объектов.
- •1.4. Разработка Windows службы
- •1.4.1. Реализация метода Main() в классе Program.
- •1.4.2. Реализация класса Windows-службы CarService.
- •1.4.2.1. Метод CarService.OnStart()
- •1.4.2.2. Метод OnStop()
- •1.4.3. Создание инсталлятора службы
- •1.6. Инсталляция службы CarService
- •1.5. Создание консольного приложения клиента.
- •1.6. Создание Windows приложения клиента
- •1.7. Хостинг удаленных объектов с использованием iis
- •2. Указания к выполнению лабораторной работы
- •2.1. Задание на лабораторную работу
- •2.2. Содержание отчета по лабораторной работе
- •Литература:
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 для доступа к удаленному объекту поставщика автомобилей.
