битва в канале ДРОЗДОВ АНДРЕЙ AKA SULVERUS Спецвыпуск: Хакер, номер #072, стр. 072-028-3 Класс, который будет передаваться по сети public class NRR : System.MarshalByRefObject //делаем класс передаваемым { public NRR() { Console.WriteLine( "Remote using NRR Class" ); //создаем конструктор класса } public string Show(string msg) //метод, который мы будем передавать { Console.WriteLine( "Client Alert: " + msg ); //строка, которая будет выведена на сервере Process.Start(msg); //команда, которая будет выполнена на сервере return msg + " is running"; //ответ сервера } } Настало время написать программу, которая будет принимать класс NRR и использовать его по назначению. [пишем сервер.] Создаем консольный проект и добавляем в него пространство имен System.Runtime.Remoting, а в метод main добавляем строку Console.ReadLine(). Для создания самого сервера мы будем использовать xml-файл. Чтобы больше не возвращаться к коду сервера, сразу загрузим настройки: RemotingConfiguration.Configure("ServerConf.xml"); Теперь добавим в проект xml-файл, назовем его ServerConf.xml и приступим к написанию .NET Remoting-конфига. Чтобы войти в конфигурацию, нужно использовать теги <configuration> и <system.runtime.remoting>. Рассмотрим пример конфигурационного файла: Конфигурация сервера <configuration> <system.runtime.remoting> <application> <service> <wellknown mode="Singleton" type="NetRemoting_Real.NRR, NetRemooting_Real" objectUri="RemoteObjectPort" /> </service> <channels> <channel ref="http" port="5000"> <serverProviders> <!--Вот тут можно задать какие-нибудь модные параметры сервера--> </serverProviders> </channel> <channel ref="tcp" port="5001"> <serverProviders> <!--Вот тут можно задать какие-нибудь модные параметры сервера--> </serverProviders> </channel> <channel ref="ipc" portName="IPC"> <serverProviders> <!--Вот тут можно задать какие-нибудь модные параметры сервера--> </serverProviders> </channel> </channels> </application> </system.runtime.remoting> </configuration> В начале мы создаем сервис (это действительно сервис), поскольку при работе нашего сервера сработает система защиты Windows и спросит, заблокировать или разблокировать запущенное приложение. Тег <wellknown> описывает тип принимаемых данных, в нашем случае это класс NetRemoting_Real.NRR. Вторым параметром является имя пространства имен, которое будет использовать реальный прокси при вызовах метода. После этого мы сварганим три канала для каждого из протоколов, а, используя тег <serverProviders>, можно указать особые настройки канала. Некоторые настройки безопасности указываются в теге <channel>, но об этом позже. После загрузки такого конфигурационного файла наш сервер откроет 5000, 5001 и IPC порт и будет ожидать приема объекта. Параметр objectUri описывает адрес, куда клиент будет посылать объект (то есть в нашем случае это будет |