- •Тверской государственный технический университет
- •Построение распределенных Windows-приложений.
- •1. Теоретическая часть
- •1.1. Принципы (Каркас) организации удаленного взаимодействия .Net Remoting
- •1.2. Прокси и сообщения
- •1.3. Каналы связи
- •Избранные члены типа ChannelServices
- •1.4. Основные механизмы удаленного взаимодействия
- •1.4.1. Способы представления удаленных объектов
- •1.4.2. Конфигурирование удаленных объектов
- •1.4.3. Активизация удаленных объектов mbr-типа
- •1.5.4. Конфигурирование объектов wko-типа
- •1.5.5. Особенности объектов mbr-типа
- •1.5. Инсталляция приложения, использующего удаленное взаимодействие
- •2. Указания к выполнению лабораторной работы
- •2.1. Построение общей сборки.
- •2.2. Создание серверной сборки
- •2.3. Создание сборки клиента
- •2.4. Тестирование удаленного приложения
- •2.5.1. Создание удаленного объекта сервера
- •2.5.2. Создание приложения сервера и клиента
- •7. Сконструируйте формы клиента и сервера так, как это показано на рис.5 и рис.6.
- •// Класс формы приложения-хоста удаленного объекта сервера
- •// Класс формы приложения-клиента удаленного объекта
- •2.5.3. Проверка работоспособности созданных приложений.
- •3. Задание на лабораторную работу
- •4. Содержание отчета по лабораторной работе
- •Литература:
2.5.1. Создание удаленного объекта сервера
Для создания удаленного объекта сервера, содержащего все необходимые функции, необходимо выполнить следующие действия:
1.В Visual Studio создать новый класс приложения в виде библиотеки с названием ListServer.
2. В Solution Explorer нажать правой клавишей на модуле Class1.cs и выбрать команду Delete.
3. В Solution Explorer в проекте ListServer нажать на правую клавишу и выбрать команду Add | Add Class. Создать название для нового класса CompanyLists.cs.
4. Изменить объявление класса, породив его из класса MarshalByRefObject, чтобы можно было бы удаленно передавать на него ссылку:
public class CompanyLists: MarshalByRefObject
{
}
5. В классе CompanyList добавить приватную переменную в виде массива строк:
private String[] Countries = {"Spain","France","Italy"};
6. Добавить открытый метод getCountryList(), возвращающий массив строк, определенный на предыдущем шаге:
public String[] getCountryList()
{
return Countries;
}
2.5.2. Создание приложения сервера и клиента
7. Сконструируйте формы клиента и сервера так, как это показано на рис.5 и рис.6.
Рис.5. Внешний вид серверного приложения
Рис.6. Внешний вид клиентного приложения.
8. Добавьте в форму сервера клавишу для регистрации канала для удаленного объекта, в форму клиента – две клавиши (для регистрации канала удаленного объекта на стороне клиента и для получения списка из удаленного объекта). Измените описание перечисленных классов в соответствующих проектах вашего решения следующим образом:
// Класс удаленного объекта сервера
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ListServer
{
public class CompanyLists: MarshalByRefObject
{
private String[] Countries = { "Spain", "France", "Italy" };
public String[] getCountryList()
{
return Countries;
}
}
}
// Класс формы приложения-хоста удаленного объекта сервера
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;
using ListServer;
namespace ListHost
{
public partial class CompanyListHostForm : Form
{
public CompanyListHostForm()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
HttpChannel myChannel = new HttpChannel(8080);
ChannelServices.RegisterChannel(myChannel,false);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(ListServer.CompanyLists),
"CompanyLists", WellKnownObjectMode.Singleton);
MessageBox.Show("Канал создан и зарегистрирован!");
}
}
}
// Класс формы приложения-клиента удаленного объекта
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ListServer;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;
namespace ListClient
{
public partial class CompanyListClientForm : Form
{
HttpChannel c = null;
CompanyLists cLst = null;
public CompanyListClientForm()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
c = new HttpChannel();
ChannelServices.RegisterChannel(c,false);
MessageBox.Show("Канал создан и инициализирован!");
}
private void button2_Click(object sender, EventArgs e)
{
cLst = (CompanyLists)Activator.GetObject(typeof(CompanyLists),
"http://localhost:8080/CompanyLists",
WellKnownObjectMode.Singleton);
listBox1.DataSource = cLst.getCountryList();
}
}
}
