- •Тверской государственный технический университет
- •Построение 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.3. Построение сборки удаленных объектов.
Для создания сборки удаленных объектов необходимо добавить в существующее решение новый проект для библиотеки классов. Назовите его CarClassLibrary. Замените пространство имен для этой библиотеки на CarGeneralAsm и создайте в нем описание следующих классов:
- радиоприемника (Radio)
- автомобиля (Car),
- автомобиля для Джэймса Бонда (JamesBondCar),
- хранилище спец. Автомобилей (CarProvider).
Измените содержимое этих классов в соответствии со следующим листингом:
using System;
using System.Collections.Generic; //содержит описание списков
using System.Runtime.Remoting; //Классы удаленного взаимодействия
using System.Runtime.Remoting.Channels; //Классы каналов
using System.Runtime.Remoting.Channels.Http;//Классы Http-каналов
using System.Windows.Forms; //Содержит описание для вывода оконных сообщений
namespace CarGeneralAsm
{
[Serializable]
public class Radio // класс радиоприемника
{
public Radio(){}
public void On(bool state)
{
if(state == true) Console.WriteLine("Радио включено!");
else Console.WriteLine("Радио выключено!");
//if(state == true) MessageBox.Show ("Радио включено!");
//else MessageBox.Show("Радио выключено!");
}
}
[Serializable]
public class Car // класс автомобиля
{
protected string petName; //Название автомобиля
protected int maxSpeed; //Максимальная скорость
protected Radio theRadio = new Radio();//Переменная-объект типа Радиоприемника
public Car(string PetName, int maxSpeed)//Конструктор
{
this.petName = PetName;
this.maxSpeed = maxSpeed;
}
// Пусть значения всех переменных будут автоматически установлены по умолчанию
public Car() {} //Конструктор по умолчанию
//Свойства:
public string PetName
{
get { return petName; }
set { petName = value; }
}
public int MaxSpeed
{
get { return maxSpeed; }
set { maxSpeed = value; }
}
//Метод управления радиоприемником
public void TurnOnRadio(bool state) { theRadio.On(state); }
}
[Serializable]
public class JamesBondCar: Car // Класс автомобиля для Джэймса Бонда
{
// Переменные:
bool canFly; // Возможность летать
bool canSubmerge; // Возможность плавать под водой
public JamesBondCar(){} // Конструктор по умолчанию
public JamesBondCar(string petName, int maxSpeed, bool canFly, bool canSubmerge)
: base(petName, maxSpeed)
{
this.canFly = canFly;
this.canSubmerge = canSubmerge;
}
// Свойства:
public bool CanFly
{
set { canFly = value; }
get { return canFly; }
}
public bool CanSubmerge
{
set { canSubmerge = value; }
get { return canSubmerge; }
}
// Методы, выдающие разные оконные сообщения:
public string CanFly()
{
if (canFly) return "Может летать!";
else return "Не может летать!";
}
public string CanSubmerge()
{
if (canSubmerge) return "Может плавать под водой!";
else return "Не может плавать - тонет!";
}
}
// Это объект MBR-типа, обеспечивающий доступ к связанным с ним объектам MBV.
public class CarProvider : MarshalByRefObject //Класс гаража спец.машин
{
// список автомобилей, имеющихся в гараже
private List<JamesBondCar> theJBCars =new List<JamesBondCar>();
public CarProvider() // Конструктор по умолчанию
{
Console.WriteLine("Создан поставщик автомобилей");
//MessageBox.Show("Создан поставщик автомобилей");
// Добавление нескольких автомобилей в список.
theJBCars.Add(new JamesBondCar("QMobile", 140, true, true));
theJBCars.Add(new JamesBondCar("Flyer", 150, true, false));
theJBCars.Add(new JamesBondCar("Swimmer", 160, false, true));
theJBCars.Add(new JamesBondCar("BasicJBC", 170, false, false));
}
// Методы:
// -получения списка всех атомобилей для Джэймса Бонда типа JamesBondCar.
public List<JamesBondCar> GetAllAutos(){ return theJBCars; }
// -поление определенного автомобиля JamesBondCar.
public JamesBondCar GetJBCByIndex(int i){ return (JamesBondCar)theJBCars[i]; }
// -добавление нового автомобиля
public void AddNewJBCar(string petName, int maxSpeed, bool canFly, bool canSubmerge)
{
theJBCars.Add(new JamesBondCar(petName, maxSpeed, canFly, canSubmerge));
}
}
}
В результате успешной компиляции получим соответствующую динамическую библиотеку CarGeneralAsm.dll, которую в дальнейшем можно будет использовать для создания удаленных объектов.