Часть 1. Общая информация Microsoft .NET Framework

advertisement
Часть 1. Общая информация
Microsoft .NET Framework — это платформа для создания, развертывания и запуска webсервисов и приложений. Она предоставляет высокопроизводительную, основанную на
стандартах многоязыковую среду, которая позволяет интегрировать существующие
приложения с приложениями и сервисами следующего поколения, а также решать задачи
развертывания и использования интернет-приложений. .NET Framework состоит из трех
основных частей — общеязыковой среды выполнения (common language runtime),
иерархического множества унифицированных библиотек классов и компонентной версии
ASP, называемой ASP .NET.
ASP .NET — это часть технологии .NET, используемая для написания мощных клиентсерверных интернет-приложений. Она позволяет создавать динамические страницы HTML.
ASP .NET возникла в результате объединения более старой технологии ASP (активные
серверные страницы) и .NET Framework. Она содержит множество готовых элементов
управления, применяя которые, можно быстро создавать интерактивные web-сайты. Вы
также можете использовать сервисы, предоставляемые другими сайтами, прозрачно для
пользователей вашего сайта.
ASP (англ. Active Server Pages — «активные серверные страницы») — первая технология
компании Microsoft, позволяющая динамически создавать веб-страницы на стороне сервера.
ASP работает на платформе операционных систем линейки Windows NT и на веб-сервере
Microsoft IIS.
ASP не является языком программирования — это лишь технология предварительной
обработки, позволяющая подключать программные модули во время процесса формирования
веб-страницы. Относительная популярность ASP основана на простоте используемых языков
сценариев (VBScript или JScript) и возможности использования внешних COM-компонентов.
Технология ASP получила своё развитие в виде ASP.NET — новой технологии создания вебприложений, основанной на платформе Microsoft .NET.
Принципы ASP.NET
Хотя ASP.NET берёт своё название от старой технологии Microsoft ASP, она значительно от
неё отличается. Microsoft полностью перестроила ASP.NET, основываясь на Common
Language Runtime (CLR), который является основой всех приложений Microsoft .NET.
Разработчики могут писать код для ASP.NET, используя практически любые языки
программирования, в том числе, и входящие в комплект .NET Framework (C#, Visual
Basic.NET, и JScript .NET). ASP.NET имеет преимущество в скорости по сравнению со
скриптовыми технологиями, так как при первом обращении код компилируется и помещается
в специальный кэш, и впоследствии только исполняется, не требуя затрат времени на
парсинг, оптимизацию, и т. д.
Вместе с тем следует учитывать, что указанное преимущество не всегда может быть
реализовано. Это связано с тем, что на скорость работы реального проекта влияют множество
факторов. В первую очередь это квалификация руководителей разработки и исполнителей:
медленные алгоритмы легко сводят на нет незначительное преимущество
скомпилированного кода перед интерпретацией серверных скриптов.
Преимущества ASP.NET перед ASP
 Компилируемый код выполняется быстрее, большинство ошибок отлавливается ещё
на стадии разработки
 Значительно улучшенная обработка ошибок времени выполнения, с использованием
блоков try..catch
 Пользовательские элементы управления (controls) позволяют выделять часто
используемые шаблоны, такие как меню сайта
 Использование метафор, уже применяющихся в Windows-приложениях, например,
таких как элементы управления и события
 Расширяемый набор элементов управления и библиотек классов позволяет быстрее
разрабатывать приложения
 ASP.NET опирается на многоязыковые возможности .NET, что позволяет писать код
страниц на VB.NET, Delphi.NET, Visual C#, J# и т. д.
 Возможность кэширования всей страницы или её части для увеличения
производительности
 Возможность кэширования данных, используемых на странице
 Возможность разделения визуальной части и бизнес-логики по разным файлам («code
behind»)
 Расширяемая модель обработки запросов
 Расширенная событийная модель
 Расширяемая модель серверных элементов управления
 Наличие master-страниц для задания шаблонов оформления страниц
 Поддержка CRUD-операций при работе с таблицами через GridView
 Встроенная поддержка AJAX
Здесь можно привести определённые сравнения. Так, ASP - производная от Win32, XML и
HTML; PHP - от XML, HTML, Java и CDI, тогда ASP.NET - от HTML и .NET(XML и XAML
соответственно). При этом, если обычно Rich Media Application создают при помощи Flash,
теперь это делается с помощью модуля Silverlight, так же через сам ASP.NET. ASP.NET богатейшая среда для разработки и развёртывания веб-ресурсов. В ASP.NET можно работать
с любым .NET языком, вплоть до Managed C++ и Visual Basic, что позволяет не задумываться
о переходе на C#.
Common Language Runtime (CLR) — «общеязыковая исполняющая среда» — компонент
пакета Microsoft .NET Framework, виртуальная машина, исполняющий программы,
написанные на .NET-совместимых языках программирования.
CLR интерпретирует и исполняет код на языке IL (реализация компиляции которого
компанией Microsoft называется MSIL), а также предоставляет MSIL-программам (а
следовательно, и программам, написанным на языках высокого уровня, поддерживающих
.NET Framework) доступ к библиотекам классов .NET Framework, или так называемой .NET
FCL (англ. Framework Class Library).
Среда CLR является реализацией спецификации CLI (англ. Common Language Infrastructure),
спецификации общеязыковой инфраструктуры компании Microsoft.
Common Intermediate Language, сокращенно CIL — промежуточный язык, разработанный
фирмой Microsoft для платформы .NET Framework. JIT-компилятор CIL является частью так
называемой CLR (англ. Common Language Runtime) — общей среды выполнения языков
.NET. Ранее язык назывался Microsoft Intermediate Language, однако был переименован для
создания стандарта ECMA-335.
В код на языке CIL должны переводить код на языках высокого уровня все компиляторы,
обеспечивающие поддержку платформы .NET. Код на CIL генерируют, в частности, все
компиляторы для платформы .NET самой фирмы Майкрософт, входящие в среду разработки
Visual Studio (C#, Managed C++, Visual Basic .NET, Visual J# .NET).
Язык CIL по синтаксису и мнемонике напоминает язык ассемблера. Его можно рассматривать
как ассемблер виртуальной машины .NET. В то же время язык CIL содержит некоторые
достаточно высокоуровневые конструкции, повышающие его уровень по сравнению с
ассемблером для любой реально существующей машины, и писать код непосредственно на
CIL легче, чем на ассемблере для реальных машин. Поэтому его можно рассматривать как
своеобразный «высокоуровневый ассемблер».
Язык CIL также нередко называют просто IL (англ. Intermediate Language), то есть просто
«промежуточный язык».
Синтаксис и мнемоника языка CIL описываются стандартом ECMA-335. Спецификация CIL
является составной частью более общей спецификации CLI (англ. Common Language
Infrastructure).
CLI (англ. Common Language Infrastructure) — спецификация общеязыковой
инфраструктуры. Наиболее известными реализациями этого стандарта являются Microsoft
.NET Framework, Mono, DotGNU Portable.NET. Спецификация CLI определяет, в частности,
архитектуру исполнительной системы .NET — CLR и сервисы, предоставляемые CLR
выполняемым программам, классы, предоставляемые библиотекой FCL, синтаксис и
мнемонику общего промежуточного языка (IL).
Текущей версией (по состоянию на конец 2007 года) спецификации CLI является версия CLI
3.5.
Часть вторая 2.
Разработка приложений
Модель разработки .NET
Для создания приложения ASP.NET необходимы два высокоуровневых средства.
• Компилятор языка, который анализирует код (в данном случае — код на C#) и
преобразует его в низкоуровневые инструкции IL (Intermediate Language — промежуточный язык).
• IDE-среда, которая позволяет писать код, проектировать разметку Web-страниц,
управлять файлами и тестировать решение.
В .NET эти два компонента разделены. Благодаря этому, языки могут иметь каждый
свой собственный компилятор и при этом использовать одинаковые инструменты проектирования и отладки.
Компилятор
Ниже перечислены компиляторы языков .NET.
• компилятор Visual Basic (vbc.exe);
• компилятор C# (csc.exe);
• компилятор JScript (jsc.exe);
• компилятор J# (vjc.exe).
Интегрированная среда разработки Visual Studio
Написание и компилирование кода вручную было бы утомительной задачей для любого разработчика. Однако интегрированная среда разработки (Integrated Development
Environment — IDE) Visual Studio предлагает ряд высокоуровневых функциональных
возможностей, которые выходят за рамки базового управления кодом. Ниже перечислены основные преимущества IDE-среды Visual Studio.
• Встроенный Web-сервер. Для обслуживания Web-приложения ASP.NET необходим
Web-сервер, подобный IIS, который будет ожидать Web-запросы и обрабатывать
соответствующие страницы. Установить свой Web-сервер несложно, но может
быть не совсем удобно. Наличие в Visual Studio интегрированного Web-сервера
позволяет запускать Web-сайт прямо из среды проектирования, а также повышает безопасность, исключая вероятность получения доступа к тестовому Web-сайту
с какого-нибудь внешнего компьютера, поскольку тестовый сервер может принимать соединения только с локального компьютера.
• Поддержка множества языков при разработке. Visual Studio позволяет писать
код на своем языке или любых других предпочитаемых языках, используя все время один и тот же интерфейс (IDE). Более того, Visual Studio также еще позволяет
создавать Web-страницы на разных языках, но помещать их все в одно и то же
Web-приложение. Единственным ограничением является то, что в каждой Webстранице можно использовать только какой-то один язык (очевидно, что в противном случае проблем при компиляции было бы просто не избежать).
• Меньше кода для написания. Для создания большинства приложений требуется
приличное количество стандартного стереотипного кода, и Web-страницы ASP.
NET тому не исключение. Например, добавление Web-элемента управления, присоединение обработчиков событий и корректировка форматирования требует установки в разметке страницы ряда деталей. В Visual Studio такие детали устанавливаются автоматически.
• Интуитивный стиль кодирования. По умолчанию Visual Studio форматирует код
по мере его ввода, автоматически вставляя необходимые отступы и применяя цветовое кодирование для выделения элементов типа комментариев. Такие незначительные отличия делают код более удобным для чтения и менее подверженным
ошибкам. Применяемые Visual Studio автоматически параметры форматирования
можно даже настраивать, что очень удобно в случаях, когда разработчик предпочитает другой стиль размещения скобок (например, стиль K&R, при котором
открывающая скобка размещается на той же строке, что и объявление, которому
она предшествует).
• Более высокая скорость разработки. Многие из функциональных возможностей
Visual Studio направлены на то, чтобы помогать разработчику делать свою работу
как можно быстрее. Удобные функции, вроде функции IntelliSense (которая умеет
перехватывать ошибки и предлагать правильные варианты), функции поиска и
замены (которая позволяет отыскивать ключевые слова как в одном файле, так
и во всем проекте) и функции автоматического добавления и удаления коммен- тариев (которая может временно
скрывать блоки кода), позволяют разработчику
работать быстро и эффективно.
• Возможности отладки. Предлагаемые в Visual Studio инструменты отладки являются наилучшим средством для отслеживания загадочных ошибок и диагностирования странного поведения. Разработчик может выполнять свой код по строке
за раз, устанавливать интеллектуальные точки прерывания, при желании сохраняя их для использования в будущем, и в любое время просматривать текущую
информацию из памяти.
Доступ к данным. Модель ADO.NET
.NET Framework включает свою собственную технологию доступа к данным — ADO.NET.
ADO.NET состоит из управляемых классов, позволяющих приложениям .NET подключаться к источникам данных (обычно реляционным базам данных), выполнять команды
и управлять автономными данными. Особенность ADO.NET заключается в том, что
эта технология позволяет писать более-менее одинаковый код для доступа к данным —
как в Web-приложениях, так и в клиент-серверных настольных приложениях, или даже
в однопользовательских приложениях, подключаемых к локальной базе данных.
Поставщики данных ADO.NET
Поставщик данных (data provider) — это набор классов ADO.NET, которые позволяют
вам получить доступ к определенной базе данных, выполнять команды SQL и извлекать
данные. По сути, поставщик данных — это мост между вашим приложением и источником данных.
Классы, которые составляют поставщик данных, включают следующие.
• Connection. Этот объект используется для установки соединения с источником
данных.
• Command. Этот объект используется для выполнения команд SQL и хранимых
процедур.
• DataReader. Этот объект предоставляет быстрый опережающий доступ только
для чтения к данным, извлеченным по запросу.
• DataAdapter. Этот объект выполняет две задачи. Первая — наполнение DataSet
(автономная коллекция таблиц и отношений) информацией, извлеченной из источника данных. Вторая — его можно использовать для применения изменений
данных к источнику данных в соответствии с модификациями, произведенными
в DataSet.
ADO.NET не содержит объектов обобщенных поставщиков данных. Вместо этого он
включает набор специализированных поставщиков для различных источников данных.
Каждый поставщик данных имеет специфическую реализацию классов Connection,
Command, DataReader и DataAdapter, оптимизированных для конкретных реляционных систем управления базами данных (СУБД). Например, если вам нужно создать
подключение к базе данных SQL Server, вы используете класс соединения по имени
SqlConnection.
Одна из ключевых идей, лежащих в основе модели поставщика ADO.NET, является
ее расширяемость. Другими словами, разработчики могут создавать свои собственные
поставщики для соответствующих типов данных. Фактически доступно множество концептуальных примеров, которые показывают, как можно создавать настраиваемые поставщики ADO.NET, служащие оболочками для нереляционных хранилищ данных, таких как файловая система или служба каталогов. Некоторые независимые поставщики
также продают собственные поставщики данных для .NET.
.NET Framework связан с небольшим набором из четырех поставщиков.
• Поставщик SQL Server. Предоставляет оптимизированный доступ к базам данных
SQL Server (версии 7.0 и выше).
• Поставщик OLE DB. Предоставляет доступ к любому источнику данных, который
имеет драйвер OLE DB. Это включает базы данных SQL Server версий, предшествующих 7.0.
• Поставщик Oracle. Предоставляет оптимизированный доступ к базам данных
Oracle (версии 8i и выше).
• Поставщик ODBC. Предоставляет доступ к любому источнику данных, имеющему
драйвер ODBC.
Уровни модели поставщиков ADO.NET
Ста
нда
рти
зац
ия в
AD
O.N
ET
На
первы
й
взгляд
может
показа
ться,
что
ADO.
NET
предл
агает фрагментированную
модель, поскольку не включает обобщенного набора объектов, которые работали бы с
множеством типов баз данных. В результате, если вы переходите от одной реляционной
СУБД к другой, вам приходится модифицировать код доступа к данным для использования другого набора классов.
Но даже несмотря на то, что разные поставщики данных .NET используют различные классы, все они некоторым образом стандартизованы. Точнее говоря, каждый поставщик основан на одном и том же наборе интерфейсов и базовых классов. Так, например, объект Connection реализует интерфейс IDbConnection, который определяет
такие центральные методы, как Open() и Close(). Подобная стандартизация гарантирует, что каждый класс Connection будет работать одинаковым образом и представит
один и тот же набор центральных свойств и методов.
“За кулисами” различные поставщики используют совершенно разные низкоуровневые вызовы и программные интерфейсы. Например, поставщик данных SQL Server
применяет патентованный протокол TDS (Tabular Data Stream — поток табличных данных) для взаимодействия с сервером. Преимущества этой модели не вполне очевидны,
но весьма существенны.
• Поскольку каждый поставщик использует одни и те же интерфейсы и базовые
классы, вы можете писать обобщенный код доступа к данным (с небольшими
дополнительными усилиями), работая с интерфейсами, а не классами поставщиков. Вы увидите эту технику в действии в разделе “Код, независимый от
поставщика”.
• Поскольку каждый поставщик реализован отдельно, он может использовать соответствующую оптимизацию (это отличается от модели ADO, где каждый вызов
базы данных должен фильтроваться через общий уровень, прежде чем достигнет
лежащий в основе драйвер базы данных). В дополнение, специализированные
поставщики могут добавлять нестандартные средства, которых не имеют другие
поставщики (например, возможность SQL Sever выполнять XML-запросы).
ADO.NET также имеет другой уровень стандартизации — DataSet. Класс DataSet —
это контейнер данных общего назначения, которые вы извлекаете из одной или более
таблиц источника данных. DataSet полностью обобщен; другими словами, специализированные поставщики не определяют собственных специализированных версий класса DataSet. Независимо от того, какой поставщик данных вы используете, вы можете
извлекать данные и помещать их в полностью автономный DataSet одинаковым образом. Это облегчает отделение кода, извлекающего данные, от кода, обрабатывающего
их. Если вы меняете базу данных, вам приходится менять только код, извлекающий
данные, но если вы применяете DataSet, и ваша информация имеет одну и ту же структуру, вам не придется модифицировать способ ее обработки.
Пространства имен ADO.NET
Пространство имен
System.Data
Описание
Содержит ключевые контейнерные классы данных, моделирую-
щие столбцы, отношения, таблицы, наборы данных, строки,
представления и ограничения. Дополнительно содержит ключевые интерфейсы, которые реализованы объектами данных,
основанными на соединениях.
System.Data.Common
Содержит базовые, наиболее абстрактные классы, реализую-
щие некоторые из интерфейсов из System.Data, и определяющие ядро функциональности ADO.NET. Поставщики данных
наследуются от этих классов (таких как DbConnection,
DbCommand и т.п.), создавая свои собственные специализированные версии.
System.Data.OleDb
Содержит классы, используемые для подключения к постав-
щику OLE DB, включая OleDbCommand, OleDbConnection и
OleDbDataAdapter. Эти классы поддерживают большинство
поставщиков OLE DB, кроме тех, что требуют интерфейсов OLE
DB версии 2.5
System.Data.SqlClient
Содержит классы, используемые для подключения к базе
данных Microsoft SQL Server, в том числе SqlDbCommand,
SqlDbConnection и SqlDbDataAdapter. Эти классы оптимизированы для использования интерфейса TDS к SQL Server.
System.Data.OracleClient
Содержит классы, необходимые для подключения к базе дан-
ных Oracle (версии 8.1.7 и выше), включая OracleCommand,
OracleConnection и OracleDataAdapter. Эти классы
используют оптимизированный интерфейс Oracle Call Interface
(Интерфейс вызовов Oracle), или OCI.
System.Data.Odbc
Содержит классы, необходимые для подключения к большин-
ству драйверов ODBC. Эти классы включают OdbcCommand,
OdbcConnection, OdbcDataReader и OdbcDataAdapter.
ODBC-драйверы включают все виды источников данных и конфигурируются через значок Data Sources (Источники данный)
панели управления.
System.Data.SqlTypes
Содержит структуры, соответствующие родным типам данных
SQL Server. Эти классы не являются необходимыми, но предоставляют альтернативу применению стандартных типов данных .NET, требующих автоматического преобразования.
LINQ
Одним из наиболее впечатляющих новшеств .NET является LINQ (Language Integrated
Query — язык интегрированных запросов) — набор расширений языка, позволяющий
выполнять запросы, не покидая привычного окружения языка C#.
В своем простейшем виде LINQ определяет ключевые слова, которые вы используете для построения выражений. Эти выражения запросов могут выбирать, фильтровать,
сортировать, группировать и трансформировать данные. Различные расширения LINQ
позволяют вам использовать одни и те же выражения запросов с разными источниками
данных. Например, LINQ to Objects — простейшая форма LINQ — позволяет формулировать и осуществлять запросы к коллекциям и объектам, находящимся в памяти. LINQ to
DataSet выполняет ту же работу над находящимися в памяти объектами DataSet. Еще
более интересны два других воплощения LINQ, позволяющие обращаться к внешним
данным: LINQ to SQL, которое позволяет выполнять запросы к базе данных SQL Server
без написания кода доступа к данным, и LINQ to XML, позволяющее читать файлы XML,
не используя специализированных классов .NET для работы с XML.
LINQ — тесно интегрированная часть .NET 3.5, языка C# и Visual Basic 2008. Однако
он не является специфичным средством ASP.NET, и может применяться в приложениях
.NET любого типа — от инструментов командной строки до “толстых” клиентов Windows.
Хотя вы можете применять LINQ где угодно, в приложении ASP.NET, скорее всего, вы
используете LINQ как часть компонента базы данных. Вы можете использовать LINQ в
дополнение к коду доступа к данным ADO.NET, или же — с помощью LINQ to SQL — вме-
сто него.
Основы LINQ
Простейший подход к LINQ заключается в рассмотрении его работы с коллекциями,
находящимися в памяти. Речь идет об LINQ to Objects — простейшей форме LINQ.
По сути LINQ to Objects позволяет вам заменить итеративную логику (такую как блок
foreach) декларативным выражением LINQ. Например, предположим, что вы хотите
получить список всех сотрудников, чьи фамилии начинаются с буквы D. Используя
функциональный код C#, вы можете запустить цикл по всей коллекции сотрудников и
добавлять каждого подходящего сотрудника во вторую коллекцию, как показано ниже:
// Получить полную коллекцию сотрудников от вспомогательного метода.
List<EmployeeDetails> employees = db.GetEmployees();
// Найти подходящих сотрудников.
List<EmployeeDetails> matches = new List<EmployeeDetails>();
foreach (EmployeeDetails employee in employees)
{
if (employee.LastName.StartsWith("D"))
{
matches.Add(employee);
}
}
Затем вы можете выполнить другую задачу с коллекцией совпадений, или же отобразить ее на Web-странице, как показано ниже:
gridEmployees.DataSource = matches;
gridEmployees.DataBind();
Ту же задачу можно решить с помощью выражения LINQ. Следующий пример показывает, как можно переписать код, заменив блок foreach запросом LINQ:
List<EmployeeDetails> employees = db.GetEmployees();
IEnumerable<EmployeeDetails> matches;
matches = from employee in employees
where employee.LastName.StartsWith("D")
select employee;
gridEmployees.DataSource = matches;
gridEmployees.DataBind();
Запрос LINQ использует набор новых ключевых слов, включая from, in, where и
select. Он возвращает новую коллекцию, содержащую только отвечающие условию
запроса результаты.
Конечный результат этого кода тот же самый — вы получаете коллекцию по имени
matches, которая заполнена сотрудниками, чьи фамилии начинаются на D, и которая
затем отображается в сетке (рис. 13.1). Однако имеется некоторое отличие в реализации, в чем вы убедитесь в следующем разделе.
Как работает LINQ
Подведем краткий итог основ LINQ, которые уже вам известны.
• Для использования LINQ вы создаете выражение LINQ. Правила построения таких
выражений вы увидите позднее.
• Возвращаемое значение выражения LINQ является объектом итератора, реализующего IEnumerable<T>.
• Когда вы перечисляете элементы объекта итератора, LINQ выполняет свою работу.
Это вызывает один хороший вопрос, а именно: как же LINQ выполняет выражение?
Какую именно работу он проделывает, чтобы выдать ваш отфильтрованный результат?
Ответ зависит от типа запрашиваемых данных. Например, LINQ to SQL преобразует
выражения LINQ в команды базы данных. В результате LINQ to SQL требуется открыть
соединение и выполнить запрос базы данных, чтобы получить необходимые данные.
Если вы используете LINQ to Objects, как в предыдущем примере, то процесс, выполняемый LINQ намного проще. Фактически в этом случае LINQ просто использует цикл
foreach для сканирования коллекции, проходя последовательно от ее начала до конца.
Хотя это не звучит так уж впечатляюще, действительное преимущество LINQ заключается в том, что он предоставляет гибкий способ определения запросов, которые могут
быть применены к широкому диапазону различных источников данных. Как вы уже
знаете, .NET Framework позволяет применять выражения LINQ для запросов к коллекциям, находящимся в памяти, к объектам DataSet, к документам XML и (что наиболее полезно) к базам данных SQL Server. Однако независимые разработчики (и будущие
версии .NET) могут добавлять собственные поставщики LINQ, поддерживающие тот
же синтаксис выражений, но работающие с другими источниками данных. Им просто
нужно транслировать выражения LINQ в соответствующие последовательности низкоуровневых шагов. Возможные примеры включают поставщиков LINQ, опрашивающих
файловую систему, другие базы данных, службы каталогов, такие как LDAP, и т.д.
Создание Web-сайтов на платформе ASP.NET
элементы управления
Включить в структуру Web-формы свои собственные элементы управления в рамках
платформы .NET можно двумя способами. Вы можете создать одно из двух.
• Пользовательские элементы управления. Пользовательским элементом управления (user control) является небольшая часть страницы, которая может содержать
статический HTML-код и серверные элементы управления Web. Преимуществом
пользовательских элементов управления является то, что как только вы создадите
такой элемент, вы сможете многократно использовать его на множестве страниц
одного и того же Web-приложения. Более того, для пользовательского элемента
управления вы можете даже придумывать свои свойства, события и методы.
• Специальные серверные элементы управления. Специальными серверными элементами управления (custom server control) являются скомпилированные классы,
которые программным образом генерируют свой собственный HTML-код. В отличие от пользовательских элементов управления, которые объявляются подобно
страницам Web-форм в файле простого текста, серверные элементы управления
всегда предварительно компилируются в DLL-библиотеки сборок. В зависимости
от того, какой код вы напишете для своего серверного элемента управления, вы
можете либо разработать содержимое “с нуля”, либо унаследовать внешний вид
и поведение от существующего элемента управления Web, усовершенствовав его
функциональные особенности, или же разработать интерфейс, создавая экземпляры и конфигурируя группу из составных элементов управления.
Темы
CSS ограничены фиксированным
набором атрибутов стилей, они не могут управлять многими аспектами элементов управления ASP.NET. Например, элемент управления
CheckBoxList обладает свойствами, которые управляют организацией элементов в виде строк и столбцов. Хотя эти свойства влияют на внешний вид элемента управления, они находятся за пределами CSS, поэтому вам придется задавать их
вручную. Кроме того, вместе с форматированием вам может понадобиться определить
некоторую часть поведения элемента управления. Например, вам понадобится стандартизировать режим выбора элемента управления Calendar или перенос текста в окне
TextBox. Понятно, что такие задачи нельзя решить с помощью CSS.
Этот пробел заполняют темы (theme). Как и CSS, темы позволяют определять набор атрибутов стилей, которые можно применять к элементам управления на многих
страницах. Однако, в отличие от CSS, темы не могут быть реализованы браузером.
Наоборот, они являются родным решением для ASP.NET, реализуемым на стороне сервера. Хотя темы не заменяют стили, они имеют несколько возможностей, которых нет
в CSS. Ключевыми же особенностями являются следующие.
• Темы основаны на элементах управления, а не на HTML. Как результат, темы позволяют определять и повторно использовать практически любое свойство элемента
управления. Например, темы позволяют определять набор обычных изображений
узлов и применять их в многочисленных элементах управления TreeView, а также
определять набор шаблонов для множества элементов управления GridView. CSS
ограничены атрибутами стиля, которые применяются непосредственно к HTML.
• Темы применяются на стороне сервера. Когда тема применяется к странице, то
пользователю отправляется последняя стилизованная страница. Если используется таблица стилей, то браузер получает информацию о странице и стиле, а затем комбинирует их на стороне клиента.
Навигация
по Web-сайту
Н
авигация является основной составляющей любого Web-сайта. Несмотря на то
что процесс перехода пользователя от одной страницы к другой не составляет
особого труда, создать единую систему навигации, которая будет работать для всего
сайта, гораздо сложнее. Вы можете создать собственную систему навигации с несколькими ссылками (и потратите на этот процесс много времени), однако будет лучше, если
вы воспользуетесь встроенной в ASP.NET системой навигации, которая здорово поможет
вам в этом деле.
В этой главе рассматриваются три основных вопроса.
• Элементы управления MultiView и Wizard. Эти элементы управления позволяют
сократить последовательность шагов до одной страницы. Благодаря этим элементам управления вы сможете комбинировать несколько страниц в одном месте, упрощая задачи навигации.
• Модель карты сайта. Эта модель позволяет определить структуру навигации по
вашему Web-сайту и связать ее непосредственно с полнофункциональными элементами управления. Вы также узнаете, как можно расширить эту конструкцию,
чтобы поддерживать различные типы элементов управления и различные места
хранения карты сайта.
• Полнофункциональные элементы управления навигации. К ним относятся элементы управления TreeView и Menu. Хотя работа этих элементов управления не
ограничена одной навигацией, вместе они составляют идеальную пару. В этой
главе будет рассмотрен широкий диапазон функциональных особенностей этих
элементов управления.
С помощью этих элементов управления, модели карты сайта и мастер-страниц вы
можете построить завершенную систему навигации, приложив для этого минимальные
усилия. Самым замечательным свойством является то, что ASP.NET четко проводит различие между данными (информацией о структуре Web-сайта) и реализацией (элементами управления навигации). Под этим подразумевается то, что вы можете реорганизовывать, заменять или переименовывать Web-страницы, не нарушая структуру Web-сайта
или не редактируя какую-либо часть его кода. Все, что вам необходимо — это внести
соответствующие изменения в файле карты сайта вашего приложения.
Безопасность
определения:
Аутентификация — процесс определения идентичности пользователя и обеспечения гарантий этой идентичности. Процесс аутентификации аналогичен регистрации
участников конференции.
В приложениях ASP.NET аутентификация реализуется одной из четырех возможных
аутентифицирующих систем:
• аутентификация Windows;
• аутентификация с помощью форм;
• аутентификация с помощью паспортов;
• специальный процесс аутентификации.
Заимствование прав (impersonation) — процесс выполнения кода в контексте (или
от имени) другого пользователя.
Вы можете использовать заимствование прав по двум причинам.
• Чтобы выдать каждому Web-приложению разные права. В IIS 5 для выполнения
всех Web-приложений на компьютере используется учетная запись по умолчанию,
указанная в файле machine.config. Если вы захотите предоставить разным Webприложениям разные права, то можете применить заимствование прав для назначения разных учетных записей Windows каждому приложению. Это особенно
важно для сценариев хостинга, когда нужно соответствующим образом изолировать Web-приложения разных заказчиков (так, чтобы, например, Web-приложение заказчика A не могло получить доступ к каталогам или базам данных Webприложения заказчика B).
• Чтобы использовать существующие права доступа пользователя Windows.
Например, представим себе приложение, которое извлекает информацию из различных файлов, для которых уже установлены специфичные для пользователей
и групп наборы прав доступа. Вместо того чтобы кодировать логику авторизации
в приложении ASP.NET, можно использовать заимствование прав для установки
идентичности текущего пользователя. Таким образом, Windows выполнит авторизацию для вас, проверив права доступа, как только вы попытаетесь обратиться
к файлу.
Авторизация — процесс определения прав и ограничений, назначенных аутентифицированному пользователю. Если взять аналогию с конференцией, то авторизация —
это процесс выдачи допуска на определенные мероприятия, например, на главный доклад.
Связываем все вместе
Итак, как же заставить работать вместе аутентификацию, авторизацию и заимствование прав в Web-приложении?
Когда пользователи впервые посещают Web-сайт, они анонимны. Другими словами,
ваше приложение не знает (и не заботится о том), кто они такие. Если только вы не
аутентифицируете их, все так и останется.
По умолчанию анонимные пользователи могут обращаться к любой странице
ASP.NET. Но когда пользователь запрашивает Web-страницу, анонимный доступ к которой закрыт, выполняется несколько шагов (показанных на рис. 19.2).
1. Запрос отправляется Web-серверу. Поскольку идентичность пользователя в этот
момент не известна, ему предлагается зарегистрироваться, используя специальную Web-страницу или диалоговое окно регистрации браузера. Специфические
детали процесса регистрации зависят от типа используемой аутентификации.
2.
Пользо
ватель
предос
тавляе
т свое
удосто
верени
е,
которо
е затем
верифи
цирует
ся
—
либо
вашим
прило
жение
м (в случае аутентификации с помощью форм), либо
автоматически средствами IIS (в случае аутентификации Windows).
3. Если удостоверение пользователя подтверждается, ему предоставляется доступ к
Web-странице. Если же оно оценивается как нелегитимное, ему предлагается повторить попытку регистрации, либо же выполняется переадресация на страницу
с сообщением о закрытии доступа.
Когда пользователь запрашивает защищенную Web-страницу, которая открыта только для определенных пользователей или ролей, процесс аналогичен, но добавляется дополнительный шаг (рис. 19.3).
1. Запрос отправляется Web-серверу. Поскольку идентичность пользователя в этот
момент не известна, ему предлагается зарегистрироваться, используя специальную Web-страницу или диалоговое окно регистрации браузера. Специфические
детали процесса регистрации зависят от типа используемой аутентификации.
2. Пользователь предъявляет свое удостоверение, которое проверяется приложением. Это стадия аутентификации.
3. Удостоверение или роли аутентифицированного пользователя сравниваются со
списком разрешенных пользователей и ролей. Если пользователь присутствует в
списке, ему открывается доступ к ресурсу; в противном случае доступ закрыт.
4. Пользователи, которым отказано в доступе, либо приглашаются на повторную регистрацию, либо перенаправляются на Web-страницу с сообщением о закрытии
доступа.
Программирование клиентской стороны
JavaScript
Знаю его как облупленного, расскажу с закрытыми глазами.
Введение в ASP.NET AJAX
ASP.NET AJAX состоит из двух частей: части стороны клиента и части стороны
сервера.
Часть клиентской стороны представляет собой библиотеки JavaScript. Эти библиотеки никак не привязаны к ASP.NET. Фактически, даже не ASP.NET-разработчики могут
применять их на своих собственных Web-страницах. Клиентские библиотеки не дают
многого в смысле средств (например, не существует каких-либо предварительно построенных частей функциональности, которые вы могли бы перетащить на свои Webстраницы). Вместо этого они устанавливают базовый фундамент, который можно использовать для разработки страниц ASP.NET AJAX. Этот фундамент расширяет язык
JavaScript, заполняя некоторые его пробелы (например, добавляя поддержку наследования), и предоставляет некоторую базовую инфраструктуру (например, методы для
управления временем жизни компонентов, манипуляции распространенными типами
данных и выполнения рефлексии).
Серверная часть ASP.NET AJAX работает на более высоком уровне. Она включает
элементы управления и компоненты, использующие библиотеки JavaScript клиентской стороны. Например, Web-форма, содержащая компонент DragPanel (из ASP.NET
AJAX Control Toolkit), предоставляет пользователям возможность перетаскивать панель
внутри окна браузера. “За кулисами” этого процесса работает некоторый специальный
код JavaScript, и этот код использует библиотеки клиентской стороны ASP.NET AJAX.
Однако DragPanel генерирует весь необходимый ей код JavaScript, избавляя вас от необходимости писать его самостоятельно.
Ясно, что ASP.NET AJAX — начало нового направления в разработке ASP.NET. Перед
тем, как двигаться дальше, стоит привести обзор всех средств, представленных в
ASP.NET AJAX.
• Расширения языка JavaScript. Эти расширения заставляют JavaScript работать
чуть более похоже на современный объектно-ориентированный язык, поддерживающий пространства имен, наследование, интерфейсы, перечисления и
рефлексию.
• Удаленные вызовы методов. Это средство позволяет получать информацию от
сервера, не выполняя полностраничной обратной отправки. Это решает ту же
проблему, что и средство клиентских обратных вызовов, знакомое вам по главе
31, но при этом позволяет вам работать со строго типизированными методами
вместо помещения всех ваших данных в единственную строку.
• Службы ASP.NET. Это средство позволяет обращаться к серверу для взаимодействия с моделью ASP.NET. В настоящее время вы можете использовать две службы
ASP.NET — одну, прменяющую информацию аутентификации форм, и другую —
получающую данные из профиля текущего пользователя.
• Частичные обновления страниц. Новый элемент управления UpdatePanel предоставляет вам возможность определять часть страницы, которая будет обновлена, без необходимости в полностраничной обратной отправке. Лучше всего то, что
вам не нужно писать никакого кода, чтобы управлять процессом обновления.
• Предварительно построенные элементы управления. Популярный инструмен-
тарий ASP.NET AJAX Control Toolkit состоит из более чем 30 элементов управления, которые используют расширенные средства ASP.NET AJAX для достижения
великолепного эффекта. Вы найдете здесь элементы, которые сворачиваются и
разворачиваются, добавляют динамическую анимацию и поддерживают автозавершение и возможность перетаскивания. И, опять-таки, эти элементы управления обрабатывают низкоуровневые детали JavaScript, так что вам не нужно заниматься ими.
Download