Симон Робинсон - 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 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Вот только один пример, как мог бы выглядеть такой файл. Мы рассмотрим все различные конфигурационные параметры:
является корневым элементом XML для всех конфигурационных файлов .NET. Все удаленные конфигурации можно найти в подэлементе . является подэлементом .
Посмотрим на основные элементы и атрибуты в :
□ В элементе определяется имя приложения с помощью атрибута name. На серверной стороне это имя сервера, а на клиентской стороне — имя клиентского приложения. Пример серверной конфигурации определяет имя удаленного приложения Hello, которое используется клиентом как часть URL для доступа к удаленному объекту.
□ На сервере элемент используется для определения совокупности удаленных объектов. Он может иметь подэлементы и вместе с определенным типом удаленного объекта — well known или client-activated.
□ Клиентской частью элемента является . Подобно элементу он может иметь подэлементы и для определения типа удаленного объекта. В отличие от элемент имеет атрибут url для определения URL удаленного объекта.
□ является элементом, который используется на сервере и на клиенте для определения хорошо известных удаленных объектов. Серверная часть выглядит так:
□ В то время как атрибут modeможет принимать значения SingleCallили Singleton, typeявляется типом удаленного класса, включая пространство имен Wrox.ProfessionalCSharp.Hello, за которым следует имя сборки RemoteHello. Именем удаленного объекта является objectURI, который зарегистрирован в канале. На клиенте атрибут typeявляется таким же, как и для серверной версии. modeи objectURIне нужны, вместо них используется атрибут urlдля определения пути доступа к удаленному объекту: протокол, имя хоста, номер порта, имя приложения и URI объекта:
□ Элемент используется для активированных клиентом объектов. С помощью атрибута typeдолжны быть определены тип данных и сборка как для клиентского, так и для серверного приложений:
□ Для определения канала, используется элемент . Это подэлемент , так что совокупность каналов можно сконфигурировать для одного приложения. Его использование аналогично для клиентов и серверов. Атрибут typeиспользуется для определения типа канала и сборки. Атрибут portявляется номером порта, который нужен только для серверной конфигурации:
Конфигурация сервера для хорошо известных объектов
Этот пример файла wellknown.configимеет значение Helloдля свойства Name. Мы используем канал TCP для прослушивания порта 6791, а канал HTTP для прослушивания порта 6792. Класс удаленного объекта — Wrox.ProfessionalCSharp.Helloв сборке RemoteHello.dll, объект в канале называется Hi, и используется режим SingleCall:
Конфигурация клиента для хорошо известных объектов
Для хорошо известных объектов в клиентском конфигурационном файле wellknown.configнеобходимо определить сборку и канал. Типы для удаленного объекта можно найти в сборке RemoteHello.dll, Hiявляется именем объекта в канале, a URI для удаленного типа Wrox.ProfessionalCSharp.Hello— это tcp://localhost:6791/Hi. На клиенте также работает канал TCP, но на клиенте не определяется порт, поэтому выбирается свободный порт.
Внесем небольшое изменение в конфигурационный файл и можем использовать канал HTTP (как видно в wellknownhttp.config):
Серверная конфигурация для активизированных клиентом объектов
Преобразуя только конфигурационный файл (который находится в clientactivated.config), можно изменить сервер с активизированных сервером объектов на активизированные клиентом объекты. Здесь определяется подэлемент элемента . С его помощью для серверной конфигурации должен быть определен атрибут type. Атрибут nameэлемента applicationопределяет URI:
Клиентская конфигурация для активизированных клиентом объектов
Файл clientactivated.configопределяет активированный клиентом удаленный объект с помощью атрибута urlэлемента и атрибута typeэлемента :
Серверный код, использующий конфигурационные файлы
В серверном коде необходимо сконфигурировать удаленное использование статического метода Configure()из класса RemotingConfiguration. Здесь создаются экземпляры всех определяемых каналов. Может быть мы захотим также узнать о конфигурациях каналов из серверного приложения. Поэтому созданы статические методы ShowActivatedServiceTypes()и ShowWellKnovmServiceTypes(), которые вызываются после загрузки и запуска удаленной конфигурации:
public static void Main(string[] args) {
RemotingConfiguration.Configure("HelloServer.exe.config");
Console.WriteLine(
"Application: " + RemotingConfiguration.ApplicationName);
ShowActivatedServiceTypes();
ShowWellKnownServiceTypes();
System.Console.WriteLine("hit to exit");
System.Console.ReadLine();
return;
}
Эти две функции показывают данные конфигурации хорошо известных и активированных клиентом типов:
public static void ShowWellKnownServiceTypes() {
WellKnownServiceTypeEntry[] entries =
RemotingConfiguration.GetRegisteredWellKnownServiceTypes();
foreach (WellKnownServiceTypeEntry entry in entries) {
Console.WriteLine("Assembly: " + entry.AssemblyName);
Console.WriteLine("Mode: " + entry.Mode);
Console.WriteLine("URI " + entry.ObjectUri);
Console.WriteLine("Type: " + entry.TypeName);
}
}
public static void ShowActivatedServiceTypes() {
ActivatedServiceTypeEntry[] entries =
RemotingConfiguration.GetRegisteredActivatedServiceTypes();
foreach(ActivatedServiceTypeEntry entry in entries) {
Console.WriteLine("Assembly: " + entry.AssemblyName);
Console.WriteLine("Type: " + entry.TypeName);
}
}
Клиентский код, использующий конфигурационные файлы
В клиентском коде с помощью конфигурационного файла client.exe.configнужно сконфигурировать только удаленные службы. После этого можно использовать оператор new для создания новых экземпляров класса Remoteнезависимо от того, происходит ли работа с активированными сервером или с активированными клиентов удаленными объектами. Но помните, что существует небольшая разница. Для активированных клиентом объектов теперь можно использовать произвольные конструкторы с помощью оператора new. Это невозможно для активированных сервером объектов и не имеет смысла в этом случае: объекты SingleCallне могут иметь состояния, так как они разрушаются вместе с каждым вызовом, объекты Singletonсоздаются только однажды. Вызов произвольных конструкторов полезен только для активированных клиентом объектов, так как только для этого вида объектов оператор new реально вызывает конструктор удаленного объекта:
RemotingConfiguration.Configure("HelloClient.exe.config");
Hello obj = new Hello();
if (obj == null) {
Console.WriteLine("could not locate server");
return 0;
Интервал:
Закладка: