Создание удаленного объекта сервера

Для создания удаленного объекта сервера, содержащего все необходимые функции, необходимо выполнить следующие действия:

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();

}

}

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: