Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #65, АПРЕЛЬ 2006 г.

сеть для стахановцев

ПАЛАГИН АНТОН AKA TONY

Спецвыпуск: Хакер, номер #065, стр. 065-012-2


сервер .net remoting

В далекие от нас времена разработчик, чтобы создать распределенное приложение, был вынужден возиться с изучением громадного талмуда и загадочных аббревиатур в нем. Теперь достаточно прочитать текст этой статьи — и ты уже подготовлен к созданию своего первого приложения c использованием технологии .NET Remoting. Итак, напишем простейший сервер, который выполняет простой тестовый метод для тестового объекта. Как минимум, для работы нам понадобится .NET Framework 1.1, а еще лучше — среда разработки M$ Visual Studio 2003 или 2005.

using System;

using System.Runtime.Remoting;

namespace SimpleServer

{

class Program

{

[STAThread]

static void Main(string[] args)

{

//Единственное отличие от обычного консольного приложения .NET RemotingConfiguration.Configure("SimpleServer.exe.config");

//Завершим работу сервера только в случае нажатия любой кнопки

Console.WriteLine("Press any key...");

Console.ReadLine();

}

}

Этот сервер ничего не делает, только конфигурирует .NET Remoting указанным файлом настроек. Вот он:

<configuration>

<system.runtime.remoting>

<application name="Hello remoting">

<service>

<wellknown

mode="SingleCall"

type="TestObject.Test, TestObject"

objectUri="Test.rem" />

</service>

<channels>

<channel ref="http" port="8000" />

</channels>

</application>

</system.runtime.remoting>

</configuration>

Формат конфигурационного файла детально описан в MSDN, а мы сейчас остановимся только на ключевых моментах. Узел wellknown описывает, что именно будет делать сервер, когда к нему придет запрос от клиента. Значение атрибута mode может быть равно SingleCall, и в этом случае для каждого клиентского обращения на сервере будет создаваться новый объект. Атрибут mode может быть равен и Singleton, и тогда на сервере создастся единственный экземпляр объекта, к которому будут обращаться все клиенты.

Атрибут type указывает имена объекта и вызываемого метода, а также имя сборки, в которой содержится объект. Обрати внимание на узел channel. Здесь в атрибуте ref указывается, каким образом будет происходить обмен: http (с помощью протокола http) или tcp (обмен напрямую через TCP/IP). А в атрибуте port указывается порт, по которому происходит обмен. Чтобы реализовать приложения, которые взаимодействуют по общедоступным каналам, будет разумно использовать пропускаемые межсетевыми экранами порты, например 8080.

клиент .net remoting

Аналогично серверному коду, код клиента инициализирует .NET Remoting, после чего он инстанцирует объект обмена и вызывает тестовый метод.

using System;

using System.Runtime.Remoting;

using TestObject;

namespace Client

{

class Client

{

[STAThread]

static void Main(string[] args)

{

//Инициализируем .NET Remoting

RemotingConfiguration.Configure("SimpleClient.exe.config");

Назад на стр. 065-012-1  Содержание  Вперед на стр. 065-012-3