Симон Робинсон - C# для профессионалов. Том II
- Название:C# для профессионалов. Том II
- Автор:
- Жанр:
- Издательство:Лори
- Год:2003
- Город:Москва
- ISBN:5-85582-187-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Симон Робинсон - C# для профессионалов. Том II краткое содержание
Платформа .NET предлагает новую среду, в которой можно разрабатывать практически любое приложение, действующее под управлением Windows, а язык C# — новый язык программирования, созданный специально для работы с .NET.
В этой книге представлены все основные концепции языка C# и платформы .NET. Полностью описывается синтаксис C#, приводятся примеры построения различных типов приложений с использованием C# — создание приложений и служб Windows, приложений и служб WWW при помощи ASP.NET, а также элементов управления Windows и WWW Рассматриваются общие библиотеки классов .NET, в частности, доступ к данным с помощью ADO.NET и доступ к службе Active Directory с применением классов DirectoryServices.
Для кого предназначена эта книгаЭта книга предназначена для опытных разработчиков, возможно, имеющих опыт программирования на VB, C++ или Java, но не использовавших ранее в своей работе язык C# и платформу .NET. Программистам, применяющим современные технологии, книга даст полное представление о том, как писать программы на C# для платформы .NET.
Основные темы книги• Все особенности языка C#
• C# и объектно-ориентированное программирование
• Приложения и службы Windows
• Создание web-страниц и web-служб с помощью ASP NET
• Сборки .NET
• Доступ к данным при помощи ADO NET
• Создание распределённых приложений с помощью NET Remoting
• Интеграция с COM, COM+ и службой Active Directory
C# для профессионалов. Том II - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
ChannelServices и RemotingContiguration
Служебный класс ChannelServices
используется для регистрации каналов в среде выполнения .NET Remoting. С помощью этого класса можно также получить доступ ко всем зарегистрированным каналам. Это крайне полезно, если для конфигурирования канала используются конфигурационные файлы, так как в этом случае канал создается неявно (см. ниже).
Канал регистрируется с помощью статического метода ChannelServices.RegisterChannel()
.
Здесь представлен серверный код для регистрации каналов HTTP и TCP:
TcpChannel tcpChannel = new TcpChannel(8086);
HttpChannel httpChannel = new HttpChannel(8085);
Channel Services.RegisterChannel(tcpChannel);
СhannelServices.RegisterChannel(httpChannel);
Служебный класс ChannelServices
можно теперь использовать для отправки синхронных и асинхронных сообщений и для отмены регистрации определенных каналов. Свойство RegisteredChannels
возвращает массив IChannel
всех зарегистрированных каналов. Возможно также и< пользование метода GetChannel()
для доступа к определенному каналу по его имени. С помощью ChannelServices
пишется специальная административная утилита для управления каналами. Вот небольшой пример показывающий как можно остановить режим прослушивания канала:
HttpServerChannel channel =
(HttpServerChannel)ChannelServices.GetChannel("http");
channel.StorListening(null);
Класс RemotingConfiguration
— другой служебный класс .NET Remoting
. На серверной стороне он используется для регистрации типов удаленных объектов активированных на сервере объектов и для маршализации удаленных объектов в ссылочный класс маршализованного объекта ObjRef
. ObjRef
является сериализуемым представлением объекта, которое было послано по линии связи. На клиентской стороне работает RemotingServices
, демаршализуя удаленный объект, чтобы создать прокси из объектной ссылки.
Вот серверный код для регистрации хорошо известного типа удаленного объекта в RemotingServices
:
RemotingConfiguration.RegisterWellKnownServiceType(
typeof(Hello), // Тип
"Hi", // URI
WellKnownObjectMode.SingleCall); // Режим
Первый аргумент метода RegisterWellKnownServiceType()
— Wrox.ProfessionalCSharp.Hello
определяет тип удаленного объекта. Второй аргумент — Hi
является универсальным идентификатором ресурса удаленного объекта, который используется клиентом для доступа к удаленному объекту. Последний аргумент — режим удаленного объекта. Режим может быть значением перечисления WellKhownObjectMode
: SingleCall
или Singleton
.
□ SingleCall
означает, что объект не сохраняет состояние. Для каждого вызова удаленного объекта создается новый экземпляр. Объект SingleCall
создается на сервере с помощью метода RemotingConfiguration.RegisterWellKnownServiceТуре()
и аргумента WellKnownObjectMode.SingleCall
. Это очень эффективно для сервера, так как получается, что не требуется поддерживать ресурсы может быть для тысяч клиентов.
□ С помощью режима Singletonобъект совместно используется всеми клиентами сервера. Такие объектные типы могут применяться, если желательно предоставить доступ к некоторым данным всем клиентам. Это не должно быть проблемой для читаемых данных, но для данных чтения-записи необходимо знать о вопросах блокировки и масштабируемости. Объект Singleton
создается на сервере с помощью метода RemotingConfiguration.RegisterWellKnownServiceType()
и аргумента WellKnownObjectMode.Singleton
. Необходимо убедиться, что данные не могут быть повреждены, когда клиенты получают доступ одновременно, но нужно и проверять, что блокирование сделано достаточно эффективно для достижения требуемой масштабируемости.
Сервер для активизированных клиентом объектов
Если удаленный объект должен хранить состояние для определенного клиента, то можно использовать активизированные клиентом объекты. В следующем разделе будут рассмотрены возможности клиентской стороны. В частности, как вызывать объекты, активизированные сервером, и объекты, активизированные клиентом. На серверной стороне активизированные клиентом объекты должны регистрироваться по-другому, чем объекты, активизированные сервером.
Вместо вызова RemotingConfiguration.RegisterWellKnownType()
необходимо вызвать RemotingServices.RegisterActivatedServiceType()
. С помощью этого метода определяются только типы, но не URI. Причина этого заключается в том, что для активированных клиентом объектов создаются экземпляры различных объектных типов с помощью одного URI. URI для всех активированных клиентом объектов должен быть определен с помощью RemotingConfiguration.ApplicationName
:
RemotingConfiguration.ApplicationName = "HelloServer";
RemotingConfiguration.RegisterActivatedServiceType(typeof (Hello));
Активизация объектов
Для клиентов возможно использование и создание удаленных объектов с помощью класса Activator
. Мы можем получить прокси для активированного сервером или хорошо известного удаленного объекта с помощью метода GetObject()
. Метод CreateInstance()
возвращает прокси для активированного клиентом удаленного объекта.
Вместо класса Activator
для активации удаленных объектов используется также оператор new. Чтобы сделать это, удаленный объект должен конфигурироваться внутри клиента с помощью класса RemotingConfiguration
.
URL-приложения
Во всех сценариях активации необходимо определять URL удаленного объекта. Этот URL является тем же самым, что и в браузере Web. Первая часть определяет протокол, за которым следует имя сервера или адрес IP, номер порта и URI, определенный при регистрации удаленного объекта на сервере в таком виде:
protocol://server:port/URI
Мы все время используем в нашем коде два примера URL: определяем протокол http
и tcp
, имя сервера localhost
, номер порта 8085 и 8086, и URI
как Hi
, что дает нам запись:
http://localhost:8085/Hi
tcp://localhost:8086/Hi
Активация хорошо известных объектов
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
/// ...
TcpClientChannel channel = new TcpClientChannel();
ChannelServices.RegisterChannel(channel);
Hello obj = (Hello)Activator.GetObject(
typeof(Hello), "tcp://localhost:8086/Hi");
GetObject()
является статическим методом класса System.Activator
, который вызывает метод RemotingServices.Connect()
для возврата объекта прокси удаленному объекту. Первый аргумент определяет тип удаленного объекта. Прокси реализует все открытые и защищенные методы и свойства, так что клиент может вызывать эти методы так же, как для реального объекта. Второй аргумент является URL удаленного объекта. Здесь используется строка tcp://localhost:8086/Hello
, где tcp
— протокол, localhost:8086
— имя хоста и номер порта и, наконец, Hello
— это URI объекта, который был определен с помощью RemotingConfiguration.RegisterWellKnownServiceType()
.
Интервал:
Закладка: