Симон Робинсон - 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;
Интервал:
Закладка: