Продолжается подписка на наши издания! Вы не забыли подписаться?

Что нового в .NET Framework 3.5

Опубликовано: 22.10.2008

В середине ноября 2007 года Microsoft объявила о выпуске очередных версий Visual Studio и .NET Framework – .NET Framework 3.5 и Visual Studio 2008, соответственно. Эта версия содержит немало нововведений, а также расширений функциональности, уже присутствовавшей в предыдущих версиях.

.NET Compact Framework

В .NET Compact Framework версии 3.5 расширена поддержка распределенных мобильных приложений благодаря включению технологии Windows Communication Foundation (WCF). Также добавлены новые языковые возможности типа LINQ, новые API, введенные по запросам разработчиков. Благодаря усовершенствованиям в диагностических инструментах улучшилась отладка.

ASP.NET

.NET Framework 3.5 содержит улучшения в ASP.NET и Visual Web Developer. Наиболее существенны улучшения в поддержке разработки Web-сайтов, использующих AJAX. ASP.NET поддерживает серверо-центричную AJAX-разработку с помощью набора новых серверных control-ов и API. Можно использовать AJAX на уже существующей ASP.NET 2.0 странице с помощью control-ов ScriptManager и UpdatePanel, обновляя страницу без полной ее пеезагрузки.

Для поддержки клиентской AJAX-разработки служит также новая клиентская библиотека Microsoft AJAX Library. Microsoft AJAX Library поддерживает клиентскую объектно-ориентированную разработку, независимую от браузера. Используя библиотеку классов в ECMAScript (JavaScript), вы можете создавать сложное поведение пользовательского интерфейса без обмена данными с сервером. Ради потребностей вашего приложения вы можете изменять соотношение клиентской и серверной разработки. Кроме того, Visual Web Developer включает улучшенный IntelliSense для JavaScript и поддержку Microsoft AJAX Library.

ASP.NET и Visual Web Developer теперь поддерживают создание ASMX и WCF Web-сервисов, и использование любой из реализаций этих Web-сервисов с Web-страниц при помощи библиотеки Microsoft AJAX. Более того, такие службы серверных приложений, как аутентификация, управление ролями и профилями теперь работают как Web-сервисы, которые могут использовать WCF-совместимые приложения, включая клиентские скрипты и клиенты Window Forms. ASP.NET позволяет использовать общие службы всем Web-приложениям.

Другие улучшения ASP.NET включают ListView – новый control для работы с данными, предназначенный для отображения данных; LinqDataSource – новый control-источник данных, позволяющий Web-разработчикам использовать LINQ через control-ы ASP.NET; новую утилиту ASP.NET Merge Tool (Aspnet_merge.exe), предназначенную для слияния скомпилированных сборок; тесную интеграцию с IIS 7.0. ListView – это широко настраиваемый в широких пределах (при помощи шаблонов и стилей) control, который поддерживает операции редактирования, вставки и удаления, а также сортировку и листание по страницам. Функциональность листания для ListView предоставляет новый control DataPager. Утилиту для слияния можно использовать для комбинирования сборок в целях поддержки различных сценариев развертывания и управления версиями. Интеграция ASP.NET и IIS 7.0 включает возможность использовать такие службы ASP.NET, как аутентификация и кэширование для содержания любого типа. Она также включает возможность разработки серверных конвейерных (pipeline) модулей на управляемом ASP.NET-коде и поддержку унифицированного конфигурирования модулей и обработчиков.

Другие усовершенствования Visual Web Developer включают поддержку multitargeting, Web Application Projects, новое Design-представление, новые средства для создания CSS и поддержку LINQ to SQL. Multitargeting позволяет использовать Visual Web Developer для создания Web-приложений под разные версии .NET Framework, включая версии 2.0, 3.0 и 3.5. 

Расширяемость и расширения (Add-Ins)

Сборка System.AddIn.dll в .NET Framework 3.5 предоставляет мощную и гибкую поддержку разработчикам расширяемых приложений. Она вводит новую архитектуру и модель, которая помогает разработчикам добавлять расширяемость в приложение и гарантирует, что их расширения продолжат работать при изменениях приложения-хозяина. Эта модель предоставляет следующие возможности:

Common Language Runtime

Коллекции

Новый класс HashSet<T> позволяет хранить наборы (множества, set) уникальных неупорядоченных значений, обеспечивая при этом быстрый (практически O(1)) доступ к элементам множества. Аналогичный класс был доступен в Wintellect .NET Power Collections (не входящих в состав .NET Framework). Кроме того, функциональность этого класса можно было эмулировать с помощью хеш-таблицы (класса HashTable и Dictionary<T>), однако при этом приходилось хранить ненужные ассоциированные значения, на что непродуктивно расходовалась память.

Диагностика

Класс EventSchemaTraceListener обеспечивает сквозную трассировку соответствующих схеме событий. Сквозную трассировку можно использовать для систем, которые содержат гетерогенные компоненты, пересекающие границы потоков, доменов приложений, процессов или компьютеров. Для трассировки сквозь эти границы определена стандартизованная схема событий. Эта схема используется различными технологиями трассировки, включая такие инструменты диагностики Windows Vista, как Event Viewer. Схема позволяет добавлять пользовательские элементы.

Класс EventSchemaTraceListener настроен так, чтобы вести логи производительности с использованием неявной поддержки трассировки без блокировок.

I/O и каналы

Каналы (pipes) обеспечивают взаимодействие процессов, работающих как на одном компьютере, так и на разных Windows-компьютерах в сети. .NET Framework предоставляет доступ к двум видам каналов: анонимным и именованным.

Сборка мусора

У класса GCSettings появилось новое свойство LatencyMode, которое можно использовать для задания времени, когда сборщик мусора вторгается в работу приложения. Свойству можно задать одно из значений из нового перечисления [System.Runtime.GCLatencyMode].

У класса GC добавлен новый вариант метода Collect – Collect(Int32, GCCollectionMode), который можно использовать для изменения поведения принудительной сборки мусора. Этот метод можно применять, например, чтобы указать, что сборщик мусора должен определить, является ли текущий момент оптимальным для сборки объектов. Режим сборки задается перечислением типа GCCollectionMode:

Рефлексия и Reflection Emit в Partial Trust

Сборки, запускаемые с частичным доверием (partial trust), теперь могут порождать код и исполнять его. Порожденный код, который вызывает только public-типы и методы не нуждается в дополнительных разрешениях, кроме разрешений, требуемых типами и методами, к которым он обращается. Новый конструктор DynamicMethod(String, Type, array<Type>[]()[]) упрощает порождение такого кода.

Если порожденный код нуждается в доступе к private-данным, новый конструктор:

public DynamicMethod(
  string name,
  Type returnType,
  Type[] parameterTypes,
  bool restrictedSkipVisibility)

позволяет ограниченный доступ. Для этого хост должен предоставить ReflectionPermission с новым флагом RestrictedMemberAccess, что позволит порожденному коду обратиться к private-данным только типов и методов из сборок с равным или меньшим уровнем доверия. См. Walkthrough: Emitting Code in Partial Trust Scenarios.

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

Работа с потоками

Улучшен ReaderWriterLock

Новый класс ReaderWriterLockSlim обеспечивает существенно лучшую производительность, чем ReaderWriterLock, сравнимую с выражением lock (SyncLock в Visual Basic). Переходы между состояниями блокировки упрощены, чтобы облегчить программирование и снизить вероятность взаимоблокировок. Новый класс поддерживает рекурсию для упрощения перехода с lock и ReaderWriterLock.

Улучшения в производительности ThreadPool

Пропускная способность диспетчеризации рабочих задач и ввода/вывода в управляемом пуле потоков значительно улучшена. Диспетчеризация теперь обрабатывается в управляемом коде, без переходов к неуправляемому коду и с меньшим количеством блокировок. Рекомендуется использовать ThreadPool, а не используемый по умолчанию (например, при асинхронном вызове делегатов) пул.

Улучшения работы с часовыми поясами

Два новых типа, DateTimeOffset и TimeZoneInfo, улучшают поддержку работы с часовыми поясами, и упрощают разработку приложений, работающих с датами и временем в различных часовых поясах.

TimeZoneInfo

Новый класс TimeZoneInfo замещает существующий класс TimeZone. Класс TimeZoneInfo можно использовать для получения любого часового пояса, определенного в реестре, а не только локального часового пояса и Coordinated Universal Time (UTC). Можно также использовать этот класс и для определения пользовательских часовых поясов, сериализации и десериализации данных о пользовательских часовых поясах, и конвертации времени между часовыми поясами.

DateTimeOffset

Новая структура DateTimeOffset расширяет структуру DateTime для упрощения работы со временем в разных часовых поясах. Структура DateTimeOffset хранит информацию о дате и времени как UTC-дату и время одновременно, со значением смещения, указывающим, насколько время отличается от UTC.

Криптография

Манифесты ClickOnce

Появились новые криптографические классы для проверки и получения информации о сигнатурах манифестов для приложений ClickOnce. Перегруженный метод VerifySignature()()() класса ManifestSignatureInformation позволяет получить информацию о сигнатуре манифеста. Перечисление ManifestKinds можно использовать для указания проверяемых манифестов. Результатом проверки будет одно из значений перечисления SignatureVerificationResult. ManifestSignatureInformationCollection предоставляет доступную только для чтения коллекцию объектов ManifestSignatureInformation для проверенных сигнатур. Кроме этого, для получения информации о сигнатурах предназначены следующие классы:

Поддержка Suite B

.NET Framework 3.5 поддерживает набор криптографических алгоритмов Suite B, опубликованный National Security Agency (NSA). Документацию NSA можно найти по адресу www.nsa.gov/ia/industry/crypto_suite_b.cfm.

Включены следующие алгоритмы:

Управляемые обертки для сертифицированных Federal Information Processing Standard (FIPS) реализаций AES, SHA-256 и SHA-384 содержатся в новых классах AesCryptoServiceProvider, SHA256CryptoServiceProvider и SHA384CryptoServiceProvider.

Классы Cryptography Next Generation (CNG) предоставляет управляемую реализацию «родного» Crypto API (CAPI). Центральным в этой группе является класс-контейнер ключей CngKey, который абстрагирует хранение и использование CNG-ключей. Это класс позволяет безопасно хранить пары ключей или открытый ключ и ссылаться на них по одному строковому имени. Классы ECDsaCng и ECDiffieHellmanCng используют объекты CngKey.

Класс CngKey используется для различных дополнительных операций, включая открытие, создание, уничтожение и экспорт ключей. Он также предоставляет доступ к нижележащему обработчику ключа, используемому при вызове «родных» API напрямую.

Есть много поддерживающих CNG классов, например, CngProvider, провайдер хранилища ключей, CngAlgorithm, реализующий алгоритм CNG, и CngProperty, отвечающий за часто исползуемые свойства ключей.

Работа с сетью

Сети “точка-точка”

«Точка-точка» – это сетевая технология, лишенная севера, позволяющая нескольким сетевым устройствам совместно использовать ресурсы и общаться друг с другом напрямую. Пространство имен System.Net.PeerToPeer предоставляет набор классов, поддерживающих Peer Name Resolution Protocol (PNRP), который позволяет находить другие узлы сети с помощью объектов PeerName, зарегистрированных в облаке (cloud) «точка-точка». PNRP может конвертировать сетевые имена в IPv6 или IPv4-адреса.

Совместная работа с использованием сети «точка-точка»

Пространство имен System.Net.PeerToPeer.Collaboration предоставляет набор классов, поддерживающих совместную работу с использованием инфраструктуру сети «точка-точка». Эти классы упрщают процесс, позволяющий приложениям:

Улучшения в производительности сокетов

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

Windows Communication Foundation

WCF и WF Integration—Workflow Services

В .NET Framework 3.5 унифицированы фреймворки Windows Workflow Foundation (WF) и Windows Communication Foundation (WCF), так что можно использовать WF как способ создания WCF-сервисов или публикации существующего workflow WF как сервиса. Это позволяет создавать сервисы с сохраняемым состоянием, легко передавать данные в рабочий поток или задействовать протоколы уровня приложения.

Надежные сервисы

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

Модель Web-программирования WCF

Модель Web-программирования WCF позволяет разработчикам создавать с помощью WCF сервисы в Web-стиле. Модель Web-программирования включает богатые возможности обработки URI, поддержку всех HTTP-команд, включая GET, и простую модель программирования для работы с разнообразными форматами сообщений (включая XML, JSON и бинарные потоки).

WCF Syndication

WCF теперь включает строго типизированную объектную модель для работы с форматами Atom 1.0 и RSS 2.0.

WCF и частичное доверие (Partial Trust)

В .NET Framework 3.5 приложения, работающие с ограниченными правами, могут использовать ограниченное подмножество возможностей WCF. Серверные приложения, работающие с правами ASP.NET Medium Trust, могут использовать WCF Service Model для создания базовых HTTP-сервисов. Клиентские приложения, работающие в Internet Zone (такие как XAML Browser Applications или неподписанные приложения, установленные с помощью ClickOnce) могут использовать WCF-прокси для работы с HTTP-сервисами. Кроме того, возможности WCF Web Programming Model (включая AJAX и Syndication) доступны частично доверенным приложениям.

Интеграция WCF и ASP.NET AJAX

Интеграция WCF с AJAX в ASP.NET предоставляет сквозную модель программирования для создания Web-приложений, использующих WCF-сервисы. В AJAX-приложениях клиент (например, браузер в Web-приложении) обменивается небольшими объемами данных с сервером, используя асинхронные запросы. Интеграция с AJAX позволяет легко создавать WCF Web-сервисы, доступные из браузера через JavaScript.

Взаимодействие Web-сервисов

В .NET Framework 3.5 Microsoft придерживается своего курса на взаимодействие и открытые стандарты, и вводит поддержку новых безопасных, надежных и транзакционных стандартов Web-сервисов:

Реализации этих протоколов доступны с использованием новых стандартных связываний, <ws2007HttpBinding> и <ws2007FederationHttpBinding>, документированных в Web Services Protocols Interoperability Guide.

Windows Presentation Foundation

В .NET Framework 3.5 появились различные изменения и улучшения Windows Presentation Foundation в различных областях, включая контроль версий, модель приложений, связывание с данными, control-ы, документы, аннотации и 3D-элементы пользовательского интерфейса.

Прямая и обратная совместимость

WPF 3.0-приложения будут работать с рантаймом WPF 3.5.

WPF 3.5-приложения будут работать с рантаймом WPF 3.0, если не используют возможностей, отсутствующих в WPF 3.0.

WPF 3.5 определяет новое пространство имен XML, http://schemas.microsoft.com/netfx/2007/xaml/presentation. При создании приложений, использующих WPF 3.5, можно использовать как это пространство имен, так и определенное в 3.0.

WPF 3.0-приложения могут работать с любой версией фреймворка, большей или равной версии, для которой разрабатывалось приложение.

Приложения

В модель приложения внесены следующие улучшения:

Визуальные и не визуальные расширения в WPF

Расширяемые приложения позволяют другим приложениям интегрироваться с ними и расширять их функциональность. Расширения (add-in) – один из распространенных способов расширения приложений. В .NET Framework расширение – это обычно сборка, упакованная в DLL. Расширение автоматически загружается приложением-хостом во время исполнения. Хост и расширение взаимодействуют друг с другом через хорошо известный контракт, которым обычно является интерфейс, публикуемый приложением-хостом.

.NET Framework реализует строительные блоки, позволяющие приложениям поддерживать расширения. Однако встраивание такой поддержки в приложение может оказаться долгой и сложной задачей, поскольку надежный дизайн расширения должен содержать следующее:

Вместо того чтобы требовать от вас решения этих проблем, .NET Framework  включает набор типов, расположенных в пространстве имен System.AddIn, и имеющих общее название "модель расширений". Модель расширений .NET Framework предоставляет функциональность для всех общих аспектов поведения расширений, перечисленных выше.

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

Кроме того, в качестве хостов для WPF –расширений могут выступать как самостоятельные приложения, так и XBAP.

Поддержка XBAP в Firefox

Plug-in для WPF 3.5 позволяет исполнять XBAP в Firefox 2.0:

Куки

Самостоятельные WPF-приложения и XBAP могут создавать, получать и удалять как сессионные, так и постоянные куки. В WPF 3.5 постоянные куки могут совместно использоваться XBAP, Web-серверами и HTML-страницами одного сайта.

Улучшения в IntelliSense в Visual Studio

Теперь можно, используя XAML-редактор Visual Studio, добавить новый элемент XAML, дать ему имя (используя атрибут Name), ссылаться на него  из кода и видеть его члены из IntelliSense Explorer.

Поддержка TextBox в Input Method Editor (IME)

Класс FrameworkTextComposition теперь имеет следующие свойства:

FrameworkTextComposition используется как свойство TextCompositionEventArgs..::.TextComposition, когда пользователь вводит текст в TextBox, используя IME, и происходит событие TextInput, TextInputUpdate или TextInputStart.

Графика

Теперь можно кэшировать изображения, загруженные по протоколу HTTP, в локальном файловом кэше Microsoft Internet Explorer, и загружать повторно запрашиваемые изображения с локального диска. В зависимости от размера изображений это может дать существенный выигрыш в производительности. Для поддержки этой возможности добавлены следующие члены:

Добавлено также событие BitmapSource..::.DecodeFailed, оповещающее о неудаче загрузки изображения из-за поврежденного заголовка.

Связывание с данными (Data Binding)

В связывании с данными улучшено следующее:

Новый механизм отладки

Отлаживать связывание с данными стало проще. Можно задать значение нового свойства PresentationTraceSources..::.TraceLevel для относящегося к связыванию объекта, чтобы получать информацию о статусе конкретного связывания. PresentationTraceSources – это статический класс из пространства имен System.Diagnostics.

Поддержка IDataErrorInfo

Модель проверки корректности данных теперь поддерживает интерфейс IDataErrorInfo, позволяя бизнес-объекту определять корректность ввода. Интерфейс определяет индексатор, принимающий имя свойства и возвращающий строку. Добавлено правило проверки DataErrorValidationRule, отслеживающее исключения, возвращаемые индексатором.

Альтернативный синтаксис проверки корректности данных

У классов Binding и MultiBinding появилось два новых свойства, ValidatesOnExceptions и ValidatesOnDataErrors. Эти два свойства предоставляют альтернативу заданию ExceptionValidationRule или DataErrorValidationRule в синтаксисе элемента.

Поддержка LINQ и XLINQ

В BindingListCollectionView внесены изменения для лучшей поддержки LINQ и связывания с коллекциями типа BindingList<T>. Поведение связывания с данными с помощью CollectionView через IEnumerable также улучшено для обеспечения лучшей производительности и лучшей поддержки связывания с результатами, предоставляемыми LINQ.

Кроме того, модель связывания с данными теперь предоставляет поддержку XLINQ.

Control-ы

RichTextBox

RichTextBox теперь сохраняет пользовательские объекты TextElement при сохранении TextElement, а также при операциях с буфером обмена. Это поведение поддерживают следующие функции:

У RichTextBox появилось новое свойство IsDocumentEnabled. Если IsDocumentEnabled равно true, такие элементы UI, как кнопки и гиперссылки, принимают пользовательский ввод.

TextBoxBase

У TextBoxBase появилось новое свойство UndoLimit, указывающее максимальное число действий.

Аннотации

Фреймворк аннотаций теперь предоставляет возможность сопоставления аннотаций с соответствующими аннотируемыми объектами. Добавлен новый интерфейс IAnchorInfo. Кроме того, в классе AnnotationHelper появился новый метод GetAnchorInfo, возвращающий IAnchorInfo.

Это позволяет использовать сценарии, в которых вам нужно использовать объект, к которому привязан объект аннотации.

Windows Workflow Foundation

Интеграция WCF и WF – Workflow-сервисы

Правила

Движок правил WF теперь поддерживает методы расширения, перегрузку операторов и использование в правилах оператора new.

Windows Forms

Улучшения в ClickOnce

Улучшения в ClickOnce включают развертывание из нескольких мест и поддержку сторонних торговых марок.

Утилита Mage.exe, которую иногда используют с ClickOnce, в .NET Framework 3.5 обновлена.

Службы Authentication, Roles и Settings

Сервисы клиентских приложений – новинка .NET Framework 3.5, которая позволяет Windows-приложениям (включая приложения Windows Forms и Windows Presentation Foundation) легко обращаться к службам аутентификации, ролей и профилей ASP.NET. Эти службы позволяют аутентифицировать пользователей, а также получать их роли и настройки приложений с сервера.

Эти службы можно задействовать, указав и сконфигурировав провайдеры клиентских служб в файле конфигурации вашего приложения, или в Visual Studio Project Designer. Эти провайдеры встраиваются в модель Web-расширений и позволяют обращаться Web-сервисам, используя существующие в API .NET Framework роли, учетные записи и настройки. Клиентские службы также поддерживают случайные соединения, сохраняя и получая пользовательскую информацию в локальном кеше данных.

Поддержка Windows Vista

Существующие Windows Forms-приложения теперь нормально работают под Windows Vista, и по возможности их интерфейс изменяется, чтобы выглядеть так же, как у приложений, написанных специально для Windows Vista. Общие файловые диалоговые окна автоматически заменяются их Vista-версиями. .NET Framework 3.5 также поддерживает пиктограмму User Account Control (UAC) Shield.

Поддержка WPF

В Windows Forms наряду с Windows Forms-control-ами можно использовать control-ы и контент WPF. Из Windows Forms можно также открывать WPF-окна.

LINQ

Language-Integrated Query (LINQ) – это новая возможность Visual Studio 2008 и .NET Framework 3.5. LINQ привносит возможности запросов в синтаксис языков C# и Visual Basic в форме стандартных, легко изучаемых шаблонов запросов. Эта технология может быть расширена до поддержки потенциально любого вида хранения данных. .NET Framework 3.5 включает сборки LINQ-провайдеров, позволяющие использовать LINQ для запросов к коллекциям .NET Framework, базам данных SQL Server, Dataset ADO.NET и XML-документам.

В .NET Framework 3.5 вошли следующие компоненты LINQ:

В библиотеке классов методы расширения LINQ, применимые к классам, перечислены в странице членов класса, в панели Contents и в панели Index. Б

Деревья выражений

Деревья выражений – это новинка .NET Framework 3.5, позволяющая представить код в виде данных. Пространство имен System.Linq.Expressions содержит типы, являющиеся строительными блоками деревьев выражений. Эти типы можно использовать для представления различных типов выражений в коде, например, вызова метода или сравнения на равенство.

Деревья выражений широко используются в LINQ-запросах к удаленным источникам данных, например, SQL БД. Эти запросы представляются как деревья выражений, такое представление позволяет провайдерам запросов исследовать запросы и переводить на язык запросов, специфичный для конкретного источника данных.

Пространство имен System.Linq.Expressions находится в сборке System.Core.dll.


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

Copyright © 1994-2016 ООО "К-Пресс"