Знакомство с Microsoft .NET Framework 2.0, Часть 1. Обзор основных изменений

Алексей Федоров, сотрудник отдела стратегических технологий российского представительства компании Microsoft

Оглавление

Что нового в библиотеке классов

В середине будущего года компания Microsoft планирует выпуск ряда продуктов и технологий для разработчиков, создающих приложения на платформе Microsoft .NET. К этим продуктам относится обновленная линейка средств разработки Visual Studio .NET 2005, в составе которой будут как средства, рассчитанные на непрофессиональных разработчиков (Express-версии Visual Studio .NET 2005), так и средства, адресованные коллективам программистов и позволяющие использовать Visual Studio .NET 2005 для автоматизации всего процесса разработки программных продуктов и систем.

Помимо этого планируется и выход новой версии СУБД - SQL Server 2005, которая также будет представлена в виде различных версий, предназначенных для решения широкого круга задач, связанных с хранением, обработкой и анализом данных.

Все указанные продукты базируются на новой версии платформы для создания распределенных приложений компании Microsoft - .NET Framework 2.0.

Данная публикация открывает обширную статью, посвященную рассмотрению изменений и дополнений в .NET Framework 2.0, и начнем мы с обзора основных новшеств и модификаций очередной версии .NET Framework.

В этой части статьи мы не будем касаться изменений и дополнений в языках программирования - в основном они носят функциональный характер и направлены на решение таких вполне конкретных задач, как, например, улучшенная поддержка средств разработки, кодогенерации, компиляции и отладки, синхронизация возможностей C# и Visual Basic .NET, упрощение выполнения ряда рутинных операций и т.п.

Также не представляется возможным рассмотреть все изменения, произошедшие в библиотеках классов .NET Framework 2.0, поэтому все желающие более детально изучить этот вопрос, могут обратиться к онлайновой утилите Whidbey Inspector (http://www.dotnet2themax.com/DotNetBrowser/ShowAssemblies.aspx), которая позволяет сравнить сборки, пространства имен, типы, члены классов и т.п. в версиях 1.1 и 2.0 и быстро определить, были ли они добавлены, удалены или модифицированы по сравнению с предыдущей версией.

Что нового в библиотеке классов

Наше знакомство с библиотекой классов будет целесообразно связать с основными уровнями классической трехуровневой архитектуры, активно используемой разработчиками при создании приложений на платформе Microsoft .NET. После рассмотрения основных классов, необходимых для реализации уровня представлений, уровня бизнес-логики и уровня доступа к данным, мы перейдем к дополнительным группам классов, обеспечивающим поддержку реализации Web-сервисов, к средствам развертывания приложений, к классам, реализующим доступ к различным системным сервисам, а также расскажем о некоторых дополнительных изменениях в библиотеке классов .NET Framework 2.0.

Уровень представления

Платформа Microsoft .NET предоставляет несколько механизмов для реализации уровня представления - это средства создания классических толстых клиентов (Windows Forms), тонких клиентов (Web Forms) и комбинация из лучших характеристик тонких и толстых клиентов, известная под названием Smart Client, с помощью которой можно создавать приложения, способные загружаться из Web, автоматически обновляться и работать как с онлайновыми, так и с отсоединенными данными.

Основная функциональность, реализуемая на уровне представления, - ввод и проверка данных, их отображение. Дополнительная же функциональность связана с поддержкой этих операций. В зависимости от типа приложения, на клиентском уровне могут находиться функции, отвечающие за навигацию, кэширование данных, локализацию и глобализацию и пр.

Windows-приложения на основе Windows Forms
В библиотеке классов .NET Framework 2.0 существенно расширен набор компонентов, применяемых для создания клиентских приложений с использованием Windows Forms (пространство имен System.Windows.Forms). В табл. 1 мы кратко перечислим новые компоненты, а в одной из следующих частей статьи рассмотрим их более подробно.

Таблица 1. Краткие характеристики новых компонентов Windows Forms

Помимо появления новых компонентов, используемых для реализации пользовательских интерфейсов Windows-приложений, произошли некоторые изменения в модели связи таких компонентов с источниками данных (Data Binding). Новый компонент DataConnector служит связующим звеном между интерфейсным элементом и источником данных и автоматически управляет функциями поддержки текущего состояния, события в источниках данных и изменения источников данных. DataConnector предназначен для совместного использования с такими компонентами, как DataNavigator и DataGridView.

Web-приложения на основе Web Forms
О новшествах в ASP .NET 2.0 мы обязательно расскажем в рамках данной статьи, но здесь мы остановимся лишь на вопросах, имеющих непосредственное отношение к созданию интерфейсов Web-приложений, то есть рассмотрим новые и измененные компоненты, а также связи с источниками данных.

К числу основных изменений относятся следующие: теперь все компоненты генерируют код, совместимый со стандартом XHMTL 1.1, и поддерживают адаптивный рендеринг, возможность задания различных цветовых схем, а также функции, позволяющие подсчитывать число обращений к тому или иному элементу.

Функции аппаратной фильтрации позволяют задавать различные значения свойств для различных устройств. Поддерживается группировка компонентов проверки ввода, которые могут быть включены или выключены для некоторых компонентов.

Новые компоненты, реализованные в ASP .NET, представлены в табл. 2.

Таблица 2. Краткие характеристики новых компонентов ASP .NET 2.0

Изменения в механизмах связи с источниками данных включают появление новых компонентов, объединяющих строки соединения, запросы и параметры в одно целое и поддерживающих различные источники данных, в том числе Microsoft SQL Server, Microsoft Access, XML-файлы, Web-сервисы и бизнес-объекты, возвращающие наборы данных.

Для реализации доступа к данным из бизнес-компонентов служит новый компонент ObjectDataSource, который предоставляет пользователям стандартный набор интерфейсов для связи с интерфейсными элементами, однако вместо непосредственной связи с источниками данных опирается на функциональность, предоставляемую бизнес-компонентами, задаваемыми пользователями.

В числе новых компонентов для отображения данных следует особо отметить:

  • GridView - заменяет компонент DataGrid из предыдущих версий ASP .NET;
  • DetailsView, FormView - для отображения и редактирования данных;
  • TreeView - для отображения иерархической информации, хранимой в XML-документах и реляционных базах данных;
  • SiteMapPath и Menu - для реализации навигации.

Уровень бизнес-логики

Задача уровня бизнес-логики - обеспечить основную функциональность приложения, поэтому именно на указанном уровне реализуются такие функции, как обработка введенных пользователем данных, программная реализация бизнес-правил, инициация транзакций, взаимодействие с внутренними и внешними компонентами системы и т.д. Основные изменения и дополнения в .NET Framework 2.0, относящиеся к уровню бизнес-логики, связаны с расширенной поддержкой транзакций, сериализации, с улучшениями во взаимодействии с COM-объектами, а также с некоторыми изменениями в .NET Remoting.

Поддержка транзакций
Новое пространство имен System.Transactions содержит классы, используемые в приложениях, которые должны участвовать в транзакциях, управляемых транзакционными менеджерами типа Microsoft Distributed Transaction Coordinator (DTC).

Для создания простых транзакционных блоков кода можно использовать класс TransactionScope, тогда как интерфейсы ITransaction и IEnlistmentNotification предоставляют возможность управлять каждой фазой многофазовых распределенных транзакций.

Новая транзакционная инфраструктура расширяет и дополняет средства поддержки COM+ транзакций, реализованные в пространстве имен System.EnterpriseServices.

С целью реализации простых транзакций (в рамках одного локального домена приложений) в качестве альтернативы DTC можно использовать класс LightweightTransactionManager, реализованный в пространстве имен System.Transactions.Ltm.

Сериализация
В тех случаях, когда требуется передача объектов между уровнями приложения, применяются механизмы сериализации. Начиная с версии 1.0 поддерживаются два механизма сериализации - XML-сериализация и бинарная сериализация.

В версии 2.0 класс BinaryFormatter, отвечающий за бинарную сериализацию, расширен поддержкой версионности: объект может быть десериализован из сериализации другой версии.

В XML-сериализации теперь поддерживаются использование свойств (а не полей) для представления элементов схем; сериализация обобщенных типов; использование структуры Nullable для представления элементов, которые могут иметь нулевые значения. Кроме того, интерфейс IXmlSerializable поддерживает генерацию нестандартных схем.

Улучшения взаимодействия с COM-объектами
Новые классы SafeHandle и CriticalHandle и классы, построенные на их основе, служат для манипуляции ресурсами операционной системы и защищают эти ресурсы от возможных атак, которые может предпринять неуправляемый код.

Расширение механизмов маршалинга существенно облегчает взаимодействие с неуправляемым кодом - добавлена возможность превращать указатели на функции в делегаты и выполнять маршалинг массивов вложенных структур фиксированого размера.

Помимо этого значительно увеличена производительность большинства стандартных вызовов между приложениями, находящимися в разных доменах. Расширенная функциональность утилит Type Library Importer (Tlbimp.exe) и Type Library Exporter (Tlbexp.exe) позволяет обнаруживать ссылки на библиотеки типов без обращения к реестру.

Изменения в .NET Remoting
В новой версии для .NET Remoting реализованы поддержка адресации по протоколу IPv6 и возможность обмена обобщенными типами. Классы в пространстве имен System.Runtime.Remoting.Channels.Tcp поддерживают аутентификацию и шифрование на уровне интерфейса Security Support Provider Interface (SSPI).

Классы в новом пространстве имен System.Runtime.Remoting.Channels.Ipc позволяют приложениям, выполняемым на одном компьютере, обмениваться данными без использования сети.

В пространстве имен System.Runtime.Remoting.Channels добавлена поддержка безопасности на уровне каналов, вследствие чего канал TCP теперь поддерживает аутентификацию и шифрование, а также функции, улучшающие поддержку балансирования нагрузки.

Уровень доступа к данным

На уровне доступа к данным решаются проблемы обеспечения простых механизмов для доступа к источникам данных реализации по мере возможностей абстракции от конкретных данных. Кроме того, на этом уровне ставится задача позволить разработчику реализовать простой набор операций для манипуляции данными. В .NET-приложениях традиционно используются механизмы и компоненты доступа к данным, известные под названием ADO .NET.

ADO .NET
Изменения и расширения, включенные в состав ADO .NET 2.0, будут подробно освещены в одной из следующих частей данной статьи, а сейчас мы дадим лишь их краткий перечень.

К новой функциональности в ADO .NET 2.0 можно отнести поддержку типов, определяемых пользователем (User-Defined Types, UDT), асинхронные операции с базами данных, поддержку типов данных XML и новых типов данных для SQL Server - varchar(max), nvarchar(max) и varbinary(max), возможность работы с набором активных результатов запроса (Multiple Active Result Sets, MARS): получение более одного открытого объекта SqlDataReader в рамках соединения, когда каждый экземпляр SqlDataReader был создан отдельной командой.

Помимо этого управляемые провайдеры поддерживают функции перечисления экземпляров Microsoft SQL Server 2000 и более поздних версий; реализованы поддержка операции быстрого копирования и вставки данных для SQL Server и доступ к статистике SQL Server 2005 через 21 счетчик производительности; новый класс DataTableReader предоставляет содержимое DataSet или DataTable в режиме только для чтения с возможностью перемещения по записям только вперед.

Новый набор интерфейсов - Schema Discovery API - позволяет запрашивать информацию о метаданных.

XML.NET
В .NET Framework 2.0 включена поддержка языка XQuery, добавлено новое хранилище XML-данных (новая модель обработки XML-данных в памяти, поддерживающая как XML DOM, так и XPath), а также реализована технология отображения данных, хранимых в реляционной СУБД, на XML-представление или на объектное представление CLR.

К тому же расширена функциональность существующих XML-классов, включая поддержку типов для классов XmlReader, XmlWriter и XPathNavigator, новую модель создания объектов XmlReader и XmlWriter и новый процессор для преобразований XSLT: метод Compile позволяет откомпилировать описание трансформации, а метод Execute - выполнить предварительно откомпилированное описание.

Web-сервисы

Пространство имен System.Web.Services теперь поддерживает протокол SOAP 1.2 и элементы, которые могут иметь нулевые значения и базовый профиль WS-I Basic Profile 1.0 (http://www.ws-i.org/Profiles/Basic/2003-08/BasicProfile-1.0a.html).

Также реализована поддержка асинхронных вызовов методов Web-сервисов и добавлена возможность использования событийно-ориентированной модели вызова методов.

Безопасность

Некоторые изменения в .NET Framework 2.0 относятся к расширению функциональности, связанной с созданием безопасных приложений.

Операции с ACL
В классах, связанных с управлением реестром, потоками и выполнением операций ввода-вывода, появилась поддержка проверки доступа на основе ACL (Access Control List). Новые классы (пространство имен System.Security.AccessControl) позволяют создавать и модифицировать ACL непосредственно из управляемого кода.

Поддержка сертификата X.509
В новой версии .NET Framework реализована поддержка сертификата X.509 (пространство имен System.Security.Cryptography.X509Certificates) на уровне хранилищ сертификатов, цепочек сертификатов и расширений полей сертификатов. Помимо этого XML-документы могут быть подписаны и зашифрованы с помощью PKCS7 и CMS - расширения стандарта PCKS7, поддерживаемого в Microsoft Windows 2000 и более поздних версиях.

Класс System.Security.SecurityException
Расширения в классе System.Security.SecurityException предоставляют дополнительные данные, позволяющие более точно определить причины появления исключений, связанных с нарушениями безопасности. Новые свойства класса позволяют определить метод, в котором произошло исключение, зону или адрес сборки, операцию, вызвавшую исключение, а также действия на уровне стека - Deny или PermitOnly.

Потоки с аутентификацией
С помощью новых классов NegotiateStream и SslStream клиентские и серверные компоненты приложения cмогут обмениваться защищенной информацией. Потоки с аутентификацией поддерживают взаимную аутентификацию, шифрование данных и данные с электронной подписью. Класс NegotiateStream использует для аутентификации протокол Negotiate Security Protocol, а класс SslStream - протокол Secure Socket Layer (SSL).

Расширенные сетевые функции

В библиотеке классов .NET Framework 2.0 появились изменения и дополнения, связанные с поддержкой сетевых функций. Например, класс NetworkChange позволяет приложениям получать нотификации об изменениях IP-адреса сетевого интерфейса, которые могут быть связаны с изменениями сетевой карты или адаптера, с отсоединением сетевого кабеля, с выходом компьютера за границы покрытия беспроводной сети или со сбоями в оборудовании.

В пространстве имен System.Net реализованы поддержка запросов от FTP-клиентов (расширенная функциональность классов WebRequest, WebResponse и WebClient), функции кэширования HTTP-ресурсов, механизмы автоматического обнаружения прокси и возможности получения информации о сетевом трафике и статистической информации.

Класс для создания Web-сервера
Пространство имен System.Net теперь включает класс для реализации HttpWebListener - Web-сервера, который можно использовать для обработки HTTP-запросов. Такой Web-сервер будет активным в течение всего времени жизни объекта HttpWebListener, а его функциональность поддерживается на платформах Windows XP Service Pack 2 и Windows Server 2003.

Информация о сетевом трафике
Используя классы в пространстве имен System.Net.NetworkInformation, приложения могут получать информацию о сетевом трафике по протоколам IP, IPv4, IPv6, TCP и UDP. Также можно программно получать информацию об адресах и конфигурации локальных сетевых адаптеров, подобную той, которая возвращается утилитой ipconfig.exe.

Проверка доступности удаленных серверов
Класс Ping позволяет программно определить доступность удаленного компьютера, выполнив синхронный или асинхронный вызов.

Поддержка электронной почты
Используя классы в пространствах имен System.Net.Mail и System.Net.Mime, приложения могут выполнять рассылку электронной почты одному или нескольким получателям, включая CC- и BCC-адресаты.

Кэширование сетевых ресурсов
Классы в пространстве имен System.Net.Cache позволяют приложениям управлять кэшированием ресурсов, полученных с использованием классов WebRequest, WebResponse и WebClient. Пользователи могут применять предопределенные механизмы кэширования либо задавать собственные, причем как для каждого отдельного запроса, так и для всех запросов в рамках одной сессии.

Кроме того, расширена поддержка безопасности и увеличена производительность классов System.Net.Sockets.Socket и System.Uri.

Отметим, что ряд рассмотренных здесь сетевых функций доступен пользователям языка Visual Basic .NET через свойства и методы класса Network, расположенного в пространстве имен My.Computer.

Другие изменения и дополнения

Помимо рассмотренных выше, в библиотеке классов .NET Framework 2.0, появился ряд расширений, которые не относятся к конкретным категориям.

Расширения для консольных приложений
Расширенная функциональность для консольных приложений (класс Console) включает возможности управления размерами консольного окна и экранного буфера, перемещением окна в экранном буфере, что может потребоваться для реализации простой анимации, для управления цветами текста и фона консольного окна, размером и видимостью курсора, а также длительностью и частотой подачи звуковых сигналов.

Функции защиты данных
Новый интерфейс Data Protection API (DPAPI) предоставляет методы, позволяющие приложениям шифровать пароли, ключи, строки соединения и иную информацию, не вызывая системных функций, представляемых платформой. Для приложений, выполняющихся под управлением Windows Server 2003 и более поздних версий, также поддерживается шифрование блоков памяти.

Расширения функций ввода-вывода
Ряд классов, связанных с операциями ввода-вывода, получил расширенную функциональность, за счет чего упрощены операции чтения и записи текстовых файлов, а также получения информации об устройствах. Классы, расположенные в пространстве имен System.IO.Compression, могут использоваться для чтения и записи данных, упакованных с помощью алгоритма GZIP.

Поддержка последовательных портов
Новый класс SerialPort предоставляет программный доступ к последовательным портам компьютера и позволяет управлять устройствами, подключенными к этому порту. С помощью данного класса можно выполнять синхронные или событийно-ориентированные операции ввода-вывода, обращаться к соответствующим драйверам, а также производить потоковые операции ввода-вывода, используя наследники класса BaseStream.

Отметим, что пользователи Visual Basic .NET также могут обращаться к COM-портам через объект My.Computer.Ports.

Активация приложений через манифест
Поддержка приложений, запускаемых по технологии ClickOnce, реализована через механизмы загрузки и активации на базе манифеста. Традиционно приложения запускаются через ссылку на сборку, которая содержит точку входа в приложение. Двойной щелчок мышью по исполняемому файлу приложения (*.exe) в оболочке Windows приводит к загрузке CLR и к передаче управления точке входа в главной сборке данного приложения.

Модель активации на базе манифеста использует манифест, а не сборку для активации приложения. Манифест полностью описывает приложение, сборки, от которых оно зависит, требования безопасности и прочую информацию, необходимую для активации приложения. Модель активации на базе манифеста имеет ряд преимуществ по сравнению с активацией сборок, что особенно важно для Web-приложений. Например, манифест содержит требования безопасности, которые позволяют пользователю без собственно загрузки кода принять решение о том, разрешать ли выполнение приложения.

Модель активации на базе манифеста предоставляет набор программных интерфейсов, позволяющих приложениям-хостам активировать приложения и расширения, описанные в манифесте. Базовая функциональность активации на базе манифеста реализована в методе AppDomain.ExecuteManifest класса AppDomain.

Запуск приложений по технологии ClickOnce позволяет развертывать клиентские приложения с Web-сервера, запуская их по ссылке, содержащей адрес файла с манифестом данного приложения. После того как манифест загружен, активизируется специальный сервис Windows - Click-Once Host, который проверяет содержимое файла манифеста, загружает необходимые для функционирования приложения сборки, устанавливает ссылки на приложение и создает новый элемент стартового меню.

Итак, мы рассмотрели основные изменения и дополнения новой версии .NET Framework 2.0. Следует отметить, что данная публикация основывается на бета-версии продукта и что к моменту выпуска в нем могут произойти определенные перемены. В последующих частях данной статьи мы постараемся учесть это и сделать предлагаемую читателям информацию как можно более актуальной.

Часть 2

Дополнительная информация


Страница сайта http://www.interface.ru
Оригинал находится по адресу http://www.interface.ru/home.asp?artId=860