Для создания удаленного объекта сервера, содержащего все необходимые функции, необходимо выполнить следующие действия:
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();
}
}
}