Раздел 6. Основы создания Web сайтов на С# в Visual Studio 2005/2008
Материал следующих глав готовятся к печати
Глава 1. Методика создания Web сайтов
Параграф 1.1. Краткое введение в ASP.NET
Создание Web приложений и Web-сервисов в Visual Studio 2005 основано на использовании технологии ASP.NET, прообразом которой была технология ASP. Технология ASP появилась в 1997 году и предназначалась для построения web-страниц в Internet Information Server(IIS). В сценариях ASP HTML-код объединялся со сценарным кодом, интерпретируемым IIS в ответ на запросы со стороны клиента. В результате строилась страница HTML, которая возвращалась клиенту.
Технология ASP.NET (Active Server Pages .NET) позволила устранить ряд недостатков, присущих ASP (ровно, как и многим другим технологиям создания Web приложений), прежде всего, за счет вывода кода из HTML-страницы в отдельный исполняемый модуль, откомпилированный для среды .NET.
Если ASP представляла собой ISAPI DLL, с набором компонентов и несколькими системными файлами, то ASP.NET — стала частью платформы .NET. Напомним, что в NET используется Intermediate Language — общий промежуточный язык, в который компилируется любой код, независимо от исходного языка программирования. Это готовый к выполнению в среде .NET Framework код. Платформа .NET интерпретирует Intermediate Language и обеспечивает взаимодействие с операционной системой. Кроме того, .NET предоставляет интерфейс приложениям ASP.NET. ASP.NET, в свою очередь, предоставляет интерфейс Web-формам (страницам ASP.NET) и Web-службам. Такое многоуровневое построение позволяет стандартизировать обращение к системным вызовам для Windows и Web, что позволило создать единую методику и среду для разработки Windows программ, Web сайтов, сервисов, библиотек и т.п.
Таким образом, вторым преимуществом ASP.NET стало объединение методики разработки приложений для Web и для Windows. А унификация используемых языков разработки Web сайтов и Windows программ, применение единой среды разработки и отладки, во многом единых или схожих по свойствам элементов управления (controls или контролов), пространств имен (библиотек) и т.д. — сделало новую технологию самой популярной на данный момент.
С точки зрения работы сети обмен данными с web-сервисами проходит по TCP через 80 порт и с использованием стандартного метода POST протокола http.
Параграф 1.2. Где и как разрабатывать Web сайты
Web приложение ASP.NET выполняется на специальных Web серверах, на которых функционируют встроенные информационные службы Интернета — Internet Information Services (IIS). IIS поддерживают доступ по протоколам FTP и HTTP и все, что необходимо клиенту для доступа к Web содержимому сервера.
IIS, получив запрос, «смотрит», к какому типу этот запрос относится (*.asp, *.shtml, *.aspx. ). Если IIS не способен самостоятельно обработать запрос (например, *.html или *.htm он может обрабатывать самостоятельно), то он передает его соответствующему ISAPI-расширению. Чтобы увидеть все доступные расширения и библиотеки, связанные с ними, необходимо:
запустить IIS Manager (как правило, в группе Administrative Tools);
в контекстном меню узла «Web Sites» («Web узел по умолчанию») выбрать пункт меню «Properties»;
в появившемся окне свойств выбрать закладку «Home Directory» («Домашний каталог»);
в группе «Application Settings» нажать кнопку «Configurations:» («Настройка»);
перейти на закладку «Mappings» («Сопоставления»).
В списке «Application Extensions» («Расширения») будут указаны все ISAPI-расширения IIS, установленные на текущий момент. Для расширения .aspx и нескольких других (.asax, .ascx, .ashx, .asmx, .axd, .config, .cs, .csproj, .java, .jsl, .licx, .rem, .resources, .resx, .soar, .vb, .vbproj, .vsdisco, .webinfo), зарегистрирован один исполняемый файл aspnet_isapi.dll. Предполагается, что на компьютере установлен IIS, а после него — .NET Framework, при другой последовательности установки ISAPI-некоторые расширения, возможно, не будет зарегистрированы.
aspnet_isapi.dll обеспечивает обработку запросов ASP.NET и создания рабочих процессов aspnet_wp.exe, выполняющих запросы (aspnet_wp.exe — процесс, в котором, собственно, и работает ASP.NET, в Windows 2003 этот процесс носит имя — w3wp.exe).
Получив такой запрос, расширение проверяет настройки в секции
конфигурационного файла machine.config, находящегося в каталоге «%SystemRoot%\Microsoft.NET\Framework\v%CLRVersion%\CONFIG. Если уже существующий процесс aspnet_wp.exe не удовлетворяет хотя бы одному требованию, указанному в настройках, то aspnet_isapi.dll создает новый процесс с требуемыми настройками. При этом старый рабочий процесс продолжает существовать до окончания обработки выполняемых запросов, после чего удаляется. Таким образом, в любом случае, выполнение Web приложения будет осуществляться в среде IIS.
В ASP.NET 1.0 разработчик сайта, использующий ASP.NET, должен был иметь непосредственный доступ к серверу приложений и его файловой системе. Эта же возможность осталась и в ASP.NET 2.0, хотя стала наименее используемой разработчиками. Для обеспечения доступа к нужному каталогу файловой системы требовалось создать сетевое подключение, например, так. Откроем на панели Windows службу «Мой компьютер», в меню «Сервис» выберем пункт «Подключить сетевой диск». Найдем свободную букву, например «W», нажимаем кнопку «Обзор». Выбираем сетевое имя каталога сервера приложений, в котором будем вести разработку (естественно он должен быть открыт для Вас), ставим галочку «Восстанавливать при входе в систему» и нажимаем кнопку «Готово». Пусть каталог разработки будет:
В любом файловом менеджере (Проводник, Far, Windows Commander ..) в Frameworks\dev (на нашем диске «W») создаем директорию с именем нашего будущего решения, например «MySite1».
Далее, нам потребуется превратить реальный каталог в виртуальный и создать пул для приложения (поскольку эта часть не утратила актуальности, речь об этом пойдет ниже в параграфе «Развертывание Web сайтов на сервере»). С этого момента можно стартовать Visual Studio 2005 и приступать к созданию сайта на сервере.
В Visual Studio 2005 описанный выше путь стал не единственным, и, мало того, новая студия позволила создавать Web приложения вообще без использования IIS и на локальном компьютере (к IIS мы вернемся только при развертывание Web сайта, но это будет после того, как сайт создан и полностью отлажен). Иными словами, при разработке Web сайта на сервере мы предварительно выполняем настройку каталога сайта, а при разработке на локальном компьютере — при развертывании сайта.
Параграф 1.3. Создания Web сайта на локальном компьютере
Для обеспечения возможности создания сайтов на локальном компьютере без использования IIS в Visual Studio 2005 имеется собственный Web-сервер (версия бесплатного сервера Cassini).
Далее мы будем вести речь только о создании сайтов на локальном компьютере и их отладке с использованием локального Web-сервера. Хотя, существенного отличия в локальной и удаленной разработке сайтов нет (она заканчивается на этапе первого шага — выбора расположения сайта, см. ниже), но, выбираемый большинством разработчиков путь, дает Вам несомненные преимущества — возможность пошаговой отладки кода приложения, и независимость от сервера приложений.
Запустим Microsoft Visul C# Net и создадим новый Web сайт, как показано это на Рис.1. (Fole/New/Web Site).
В окне Templates диалогового окна «New Web Site» задаем «ASP.NET Web Site». В окне» Location» выбираем File System, с помощью кнопки Browse определяем папку, где будем создавать все наши сайты. В выбранной папке будет создана новая папка с именем нашего сайта (WebSite1 для Рис.1.). Не забудем выбрать Language и нажимаем «OK». Сайт создан
Рис.1. Создание ASP.NET Web сайта
Сайт на данном этапе представляет собой два файла (Рис.2.): Default.aspx и Default.aspx.cs. Файл Default.aspx определяет HTML содержимое сайта, а Default.aspx.cs — программный код, который отделен от HTML содержимого и предназначен для программного формирования данного содержимого или выполнения каких либо иных действий на сервере. Эта связь определена в директиве Page через свойство CodeFile.
Рис.2. ASP.NET решение Web сайта
Рассмотрим связанный код файла Default.aspx.cs:
Код состоит из одного класса _Default, наследника класса System.Web.UI.Page. Имя класса также присутствует в директиве Page файла Default.aspx — Inherits=»_Default»;
Для того, чтобы убедиться, что это Web сайт, нажмем кнопочку F5(меню Debug\Start Debugging). Отладчик предложит создать файл Web.config, после подтверждения согласия стартует локальный Web Server, иконка которого помещается в системный трэй, а решение отобразится в Web Browser(Рис.3.).
Рис.3. Выполнение ASP.NET сайта
Параграф 1.4. Жизненный цикл страницы
И хотя наш сайт пуст, но он уже «ведет насыщенную жизнь». Для того, чтобы убедиться в этом, добавим в директиву Page свойство Trace=»true» (Директива Page имеет множество свойств, о которых мы будем вести речь по мере их востребования). Вновь нажимаем F5. Результат показан на Рис.4.
Рис.4. Жизненный цикл страницы
Мы видим множество событий, которые произошли при отображении даже пустой страницы. При создании страницы одно из событий (Load) оформляется как метод класса (Page_Load). Однако разработчику доступны и еще четыре события: PreInit, Init, PreRender, Unload. Для каждого из них в класс может быть включен метод его обработки. Кроме того, разработчику будут доступны и события дочерних элементов управления, которые возникают между событиями Load и PreRender страницы. Это следует хорошо запомнить (к этому мы вернемся в следующем параграфе).
Параграф 1.5. Добавление функциональности сайту
На данном этапе наш сайт работоспособен. Добавим на сайт несколько контролов. В окне дизайнера формы (вкладка Designe файла Default.aspx) или на вкладку Source (в отличие от Visual Studio 2003) мы можем перетащить доступные визуальные контролы из окна Toolbox с любой его вкладки, например, Button и Label с вкладки Standart(Рис.5.).
Рис.5. Добавление контролов на сайт
После добавления контрола можно посмотреть и установить его свойства, воспользовавшись его контекстным меню и вызвав окно свойств (пункт Properties) или задать события для обработки, перейдя на вкладку Events окна Properties и кликнув мышкой в окошечке рядом с именем события. Напомним, что двойной клик по самому контролу вызывает его наиболее часто (по мнению разработчиков) востребованное событие (для кнопки это OnClick и обработчик события Button_Click).
В файле Default.aspx.cs добавим (напишем по образцу метода Page_Load) методы Page_PreInit, Page_Init, Page_PreRender, Page_Unload. Создадим событие Button1_Click, Button1_Init, Button1_Load, Button1_PreRender, Button1_Unload (методы для обработки событий пишутся для страницы, а для контролов создаются, а не пишутся, иначе в файле Default.aspx контрол будет не связан с событием).
Файл Default.aspx (его содержимое между тэгами Body) примет вид:
Наполним содержанием методы событий. Поставим целью показать не только возможности вывода текста на страницу, но и возможности изменения свойств элементов управления на различных этапах жизненного цикла страницы. Будем исследовать свойство Text элемента управления Label. Для контрола Label сначала установим свойство EnableViewState в true (по умолчанию), а затем в false и проанализируем результаты функционирования кода.
Свойство страницы IsPostBack равно false только при первом вызове страницы.
Выполним решение (F5), результат показан на Рис.6.
Рис.6. События жизненного цикла страницы и их влияние на свойства элементов
Из анализа функционирования данного кода видно:
Событие PreInit фиксирует этап начала персонализации и формирования страницы в целом. У дочерних элементов это событие не возникает. В обработчике Page_PreInit можно устанавливать шаблоны и темы оформления, изменять свойства элементов. При повторном вызове страницы обработчик данного события также вызывается, но его действие не изменит свойства элементов, у которых установлено свойство EnabledViewState в true.
Событие Init — начало рекурсивной инициализации содержания дочерних элементов страницы. Событие Init дочерних элементов вызывается ранее события Init страницы. Для событий Init дочерних элементов могут быть созданы собственные обработчики события (например, Button1_Init). В Page_Init возможно считывать и инициализировать свойства всех дочерних элементов. При повторном вызове страницы обработчики данного события также вызывается, но их действие, как и в PreInit, не изменит свойства элементов, у которых установлено свойство EnabledViewState в true.
Событие Load возникает как для страницы, так и для дочерних элементов. События дочерних элементов возникают позже чем событие загрузки страницы (в отличии от событий Init). На этом этапе доступны все свойства элементов управления, не зависимо от свойства EnableViewState.
Событие PreRender возникает тогда, когда начинается проверка создания всех элементов страницы. Это последняя возможность внести изменения в свойства страницы и ее элементов.
Событие Unload — начало освобождение занятых ресурсов (закрытие файлов, открытых соединений с базой и т.п.). Свойства страницы на данном этапе недоступны.
Параграф 1.6. Установка Web сайта на сервер
В предыдущем параграфе мы создали Web сайт, который выводит информацию в Browser. Однако, он должен работать не в режиме отладки, а на некотором сервере приложений или, хотя бы, на локальном компьютере, и вызываться как любая интернет страничка из Browser.
Настройка функционирования сайта на локальном компьютере во многом схожа с настройкой его функционирования на сервере приложений и проходит ряд этапов.
Этап 1. Публикация сайта
Сайт перед развертыванием должен быть опубликован — то есть, исполняемый модуль должен быть превращен в dll, а файл странички Default.aspx получить ссылку на эту dll. Сайт перед развертыванием должен быть опубликован — то есть, исполняемый модуль превращен в dll, а страничка aspx получить ссылку на эту dll. Для публикации сайта создадим какой либо каталог (поближе к корню жесткого диска, например C:\MySite_1). Последовательно выполним в меню Visual Studio подпункт Rebuild Web Site пункта Build, а затем подпункт Publish Web Site. В появившемся окне Publish Web Site (Рис.7.) пишем или выбираем C:\MySite_1. Нажимаем кнопочку OK. Сайт опубликован (Рис.7.). Он состоит из нашего файла Default.aspx, файла Web.config (к этому файлу мы не раз еще вернемся), необязательного для сайта файла PrecompiledApp.config и библиотеки со случайным именем.
Рис.7. Публикация Web сайта
Обратим внимание на то, что файл Default.aspx остался таким же, как мы его создали. Изменилась только директива Page — в ней добавилась ссылка на библиотеку класса.
Этап 2. Настройка IIS для работы с сайтом
Для функционирования Web сайтов на Вашем локальном компьютере (не только данного сайта) должна быть установлена служба IIS. Если для выхода в Интернет используется прокси-сервер (на домашних компьютерах прокси для этого никогда не используется), может потребоваться настроить Internet Explorer так, чтобы обходить прокси-сервер (например, так, как показано на Рис.8.).
Рис.8. Настройка Internet Explorer
IIS при установке Windows обычно по умолчанию не устанавливаются. Установить IIS или выбрать дополнительные компоненты можно с помощью приложения «Установка и удаление программ» панели управления Windows. Чтобы установить IIS, добавить или удалить компоненты, нажимаем кнопку «Пуск», «Настройка», выбираем «Панель управления», «Установка и удаление программ». Открываем вкладку «Добавление и удаление компонентов Windows» и ставим галочку напротив Internet Information Serveces (IIS) — Рис.9.
Рис.9. Установка IIS
Далее следуем появляющимся на экране инструкциям для установки, удаления или добавления компонентов IIS.
После установки программы на компьютере создаются следующие каталоги с пользовательским содержимым:
Вы работаете в Visual Studio и на Вашем компьютере Net Framework был установлен вместе со студией.
Если Вы устанавливаете сайт на другом компьютере, то вам придется выполнить установку Net Framework. В Windows Vista Net Framework должен быть предустановлен, ровно как и в Widdows XP с Servis Pak 2, для остальных Windows потребуется установить дистрибутивный пакет Microsoft .NET Framework 2.0, который устанавливает среду .NET Framework и связанные с ней файлы, необходимые для запуска приложений, созданных для работы в среде выполнения .NET Framework 2.0.
Все необходимое можно скачать бесплатно с сайта Microsoft и более близких ссылок: Ссылка 1, Ссылка 2, Ссылка 3. В любом поисковике наберите «Microsoft .NET Framework скачать» и Вы найдете еще множество ссылок и инструкций по установке (хотя они и не требуются, пакет устанавливается как обычная программа).
Этап 3. Проверка работоспособности
Для проверки работоспособности IIS набираем в браузере (в Explorer):
Если все настройки Windows правильны, то в браузере должны отобразиться страницы:
Теперь можно страницы ASP просто копировать в папку.
Доступ к файлу из браузера
Если проверка пройдет неудачно, проверьте настройки ISS (кнопка «Пуск», «Настройка», выбираем «Панель управления», «Администрирование», «Internet Information Services», развертываем в дереве компьютера «Веб-узел по умолчанию») и, в контекстном меню «Веб-узел по умолчанию», выбираем пункт «Свойства». На вкладке «Домашний каталог» и
Рис.10. настройки ISS
вкладке ASP.NET (Рис 2.4) устанавливаем настройки, показанные на рисунках.
Рис.11. настройки ISS
Для развертывания программы потребуется еще одно действие — создание виртуального каталога для программы.
Этап 4. Установка сайта на локальный сервер
Скопируйте всю директорию C:\MySite_1 с нашим сайтом в каталог C:\Inetpub\wwwroot\ (именно сюда).
Вновь запустите IIS (кнопка «Пуск», «Настройка», выбираем «Панель управления», «Администрирование», «Internet Information Services», развертываем в дереве компьютера «Веб узел по умолчанию»). В его дереве появилась папка MySite_1. Осталось превратить ее в виртуальный каталог. На вкладке «Каталог», даем права данному приложению и нажимаем кнопку «Создать».
Рис.12. Создание виртуального каталога
При создании виртуального каталога следует продумать и определить права доступа (В разных версиях IIS список прав может отличаться от приведенного на рисунке):
Доступ к тексту сценариев (Scripts Source Access) — разрешает выполнение ASP.NET файлов.
Чтение (Read) — IIS дает доступ пользователю к запрошенному ASP файлу каталога. Предоставление этого права не дает пользователю права на чтение конфигурационных файлов ASP NET, а отсутствие этого права запрещает доступ и к другим типам файлов (например, HTML и любым не ASP NET файлам).
Запись (Write) — разрешение на запись в каталог.
Выполнение (Execute) — разрешение на запуск других исполняемых файлов (например, ISAPI и CGI).
Запись в журнал (Log Visits) — разрешение на запись в журнал.
Обзор каталогов (Directory Browsing) — разрешение на просмотр файлов каталога.
Индексация каталога (Index this resource).
Проверяем установки на вкладках «Каталог», «Документы» и «ASP.NET» (Рис.13.) и нажимаем кнопку «OK».
Рис.13. Создание виртуального каталога для папки MySite_1
Обратим внимание на изменившийся вид папки MySite_1 — этот вид соответствует виртуальным каталогам и к ним можно обращаться по URL (Рис.14.).
Рис.14. Виртуальный каталог MySite_1.
Набрав в Explorer следующую строку, мы вызываем программу, она выполняет то, что презентовано выше.
Этап 5. Установка сайта на сервер приложений
Установка сайта на сервер приложений практически нечем не отличается от установки приложения на локальную машину. Скопируйте всю директорию C:\MySite_1 с нашим сайтом в каталог Веб узла по умолчанию сервера приложений. Для этого у вас должен быть соответствующий доступ к этому каталогу и IIS удаленного сервера. После этого сделайте каталог MySite_1 виртуальным, как мы делали выше. Единственное отличие на серверах приложений обычно требуется выбрать Application pool, который должен быть ASP.Net.2 (Рис.15.). Если вы сами разворачиваете сервер приложений, то возможно Вам придется его создать через контекстное меню узла Application Pools (Рис 16).
Рис.15. Виртуальный каталог MySite_1 на сервере приложений
Рис.16. Создание Application Pool для приложения
Глава 2. Подготовка setup файлов и инсталляция web сайтов
На данном этапе у нас есть решение, созданное на локальной машине в директории C:\SamplesASP\WebSite1, виртуальная директория для решения MySite_1 (C:\Inetpub\wwwroot\MySite_1). Мы можем воспользоваться заделом или создать новый сайт.
Изменим решение, убрав из него все лишнее, и вновь поместим на форму контрол Label и Button:
Наполним сайт содержанием:
Вызываем для решения Solution Explorer (View/Solution Explorer) и в самой верхней строчке решения вызываем контекстное меню пункт Add, выбираем пункт New Project. В открывшемся окне Add New Priject выбираем Project Types Setup and Deployment Projekts и Templates Web Setup Project, Name выбираем любое. Location также не имеет существенного значения — это где будут находиться файлы Setup (Рис.17,18.).
Рис.17. Создание проекта инсталляции
Рис.18. Создание проекта инсталляции
В окне File System (MySite1) добавляем через контекстное меню Web Application Folder, пункт Add/Project Output Content Files (рис 19.).
Рис.19. Создание проекта инсталляции
Для Web Application Folder вызываем контекстное меню, выбираем пункт Properties Window и можем поменять директорию установки на сервере — пункт Virtual Directory — изменим на созданную нами виртуальную директорию MySite_1 (Рис.20.).
Рис.20. Создание проекта инсталляции
Вызываем контекстное меню в Solution Explorer для узла MySite1 и выполняем пункт Rebuild (Перед этим необходимо выполнить Build/Rebuild Solutation в режиме Release).
Инсталляционные файлы находятся по адресу заданному нами в Location (Рис.18.) в директории Release. Это файлы MySite1.msi и setup.exe.
Стираем все из директории C:\Inetpub\wwwroot\MySite_1\ и выполняем установку, запустив на выполнение файл setup.exe. Согласившись со всеми настройками, мы закончим установку приложения. Вызываем сайт:
Аналогично можно поступить и на сервере приложений. Копируем файлы MySite1.msi и setup.exe. в любую директорию сервера приложений и выполняем установку, запустив на выполнение файл setup.exe (естественно на сервере) или MySite1.msi. Согласившись со всеми настройками, мы закончим установку приложения. Вызываем страничку из браузера:
Глава 3. HTML и Web контролы и их использование
3.1. HTML и Web контролы
Для уяснения разницы в использовании контролов вкладок HTML и Standart добавим в созданный выше проект два контрола Button — один с вкладки HTML, другой с вкладки Standart. Зададим соответствующие надписи на кнопках, чтобы можно было их различить, и рассмотрим HTML код в файле .aspx. Кнопка с вкладки Standart (Button1), в отличие от кнопки с вкладки HTML, имеет в задании кода также говорит о ее назначении для серверной обработки событий. Кнопка с вкладки HTML является аналогом кнопки HTML документа и может быть использована соответствующим образам (например для запуска скриптов формы и т.п.).
HTML контролы могут быть преобразованы в так называемые, серверные элементы управления (HTML Server Controls) — серверные аналоги стандартных элементов HTML. Для преобразования достаточно вызвать контекстное меню для этого контрола и указать для него режим «Run as Server Control».
Серверные контролы — уже имеют все для выполнения функций серверных или, как принято в данном случае говорить, сетевых элементов управления. Сетевые элементы управления в отличии от серверных имеют множество свойств и событий и отвечают требованиям стандартов разработки приложений Windows, (например, выше, мы использовали обработчик события нажатия кнопки, созданный как для обычного Windows приложения). Кроме того, несмотря на возможность преобразований, между двумя вариантами контролов остаются различия:
В большинстве HTML-редакторов, например, FrontPage, серверные элементы управления будут не видны. Перед Web-дизайнерами встает вопрос: воспользоваться средствами программирования NET или средствами Web-дизайна HTML-редакторов, к которым они привыкли. В тоже время Microsoft, в настоящее время, создала свои средства визуальной разработки (Visual Web Developer 2005), а, учитывая, что продукты фирмы имеют один из самых больших секторов на компьютерном рынке, то следует ожидать и поддержку Net от разработчиков других фирм.
Серверные элементы управления могут быть представлены множеством тегов (например DataGr ).
Если серверный и HTML контрол выполняют одинаковую функцию отправки информации на сервер (например, из текстового поля), то серверный контрол сохранит эту информацию (если обработчик какого либо события не изменит ее), а информация в HTML контроле будет стерта после отправки.
Серверные элементы имеют возможность корректировать код (подстраиваться) под тип браузера.
И, как отмечалось, серверные элементы имеют более развитую функциональность и поддерживают стандартный интерфейс разработки Windows приложений.
Перечисленное выше говорит о предпочтительности использования серверных контролов.
И в заключении рассмотрим сгенерированный HTML код страницы с двумя кнопками, который будет отображен в браузере.
Данный код, в отличии от исходного в файле aspx, не имеет уже выражения runat=»server» (браузеру нет смысла его интерпретировать), но появилось дополнительное скрытое поле (input type=»h ) всех серверных элементов управления.
3.2. Динамическое создание таблиц и работа с ними
Как пример использования серверных Web контролов имеющих аналог среди HTML контролов, рассмотрим динамическое создание таблиц. Этот пример призван показать богатство возможностей серверных контролов по сравнению с их «младшими братьями».
Для динамического создания таблиц в пространстве имен System.Web.UI.WebControls имеются ряд классов, основные из которых: HtmlTable, HtmlTableRow, HtmlTableCell, HtmlTableCellCollection, HtmlTableRowCollection
В Visual Studio реализована поддержка простой модели таблицы. Это означает, что нельзя динамически создать , , ,
, , элементы.Обратим внимание, что создавать контролы придется каждый раз при перезагрузке страницы так как элемент Таблица добавляется в экземпляр класса страницы, который формируется заново при каждой загрузке страницы. Однако содержимое ячеек таблицы и состояние контролов восстанавливается (используется встроенный механизм ViewState).
Ниже приведен пример динамического создания таблицы, вывода в ячейки созданной таблицы информации и элементов управления, которые так же создаются динамически. Кроме того, показан пример использования событий динамически созданных и добавленных в ячейки таблицы элементов управления. На форме решения web сайта размещены три контрола: PlaceHolder, Label ( >
Рис.21. Пример работы с динамически созданной таблицей
Глава 4 Управление состоянием Web приложений
Параграф 4.1. Использование VIEWSTATE
Ранее мы отмечали, что код файла aspx. после первого вызова страницы с сервера, в отличии от исходного, уже не имеет свойства runat=»server» (браузеру он не нужен), но содержит дополнительное скрытое поле (input type=»h , то можно просмотреть вид и объем информации, передаваемой сервером (Рис.22.).
Рис.22. VIEWSTATE и объем передаваемой информации
Имеется возможность запретить использование __VIEWSTATE как для страницы целиком, так и для отдельных элементов, используя свойство EnableViewState, которое имеется и у директории Page, и у многих контролов.
Разработчик может хранить в VIEWSTATE и свою информацию, например, число ошибок допущенных при тестировании (в директиве Page EnableViewState должно быть true).
В приведенном примере значение переменной viNumError после отсылки страницы на сервер и ее возврата клиенту не сохраняется. VIEWSTATE помогает поместить ее значение в поле сохранения и восстановить при загрузке страницы. Этот механизм достаточно удобен при работе на одной страницы. Переход на другую страницу сайта (например, Response.Redirect(«Default2.aspx»)) и последующий возврат на исходную, ведет к потере сохраненных значений. Кроме того, VIEWSTATE текущей страницы недоступно странице, на которую будет выполнен переход.
Параграф 4.2. Передача информации между страницами сайта
4.2.1. Использование URL
Существует несколько способов передачи данных между страницами. Самый простой — включить значение переменной в URL(строку запроса) вызываемой страницы. Передаваемые данные должны следовать за URL вызываемой страницы после вопросительного знака. Данные включаются по принципу «имя-значение» и разделяются знаком &.
Для демонстрации данной возможности, добавим в решение еще одну Web страничку ()
URL вызова будет:
Этот метод имеет как свои преимущества (нет дополнительной нагрузки на сервер, высокая скорость передачи данных), так и недостатки (открытость и незащищенность информации, ограниченность объема — предельная длина URL обычно 1-2кб и ограниченный набор символов, допустимых в URL.
Для приема данных используется метод QueryString класса Request.
Для демонстрации использования этой возможности добавим еще одну кнопку в решение предыдущего параграфа. Запишем следующий код обработчика нажатия кнопки:
Кликнем правой кнопкой мышки на имени решения в SolutionExplorer и, выбрав пункт контекстного меню Add, подпункт Add WebForm, добавим к решению еще одну форму, которая по умолчание будет иметь имя WebForm2. На форму поместим контрол Label и в Page_Load запишем следующий код:
По нажатии кнопки 2 будет не только вызвана страничка WebForm2.aspx, но и передан наш текст в Label.
Еще одна возможность передачи данных в URL — передача и получение информации о контроле, который вызвал Redirect на страницу. Пусть у нас несколько событий нажатия кнопок замкнуты на один обработчик, например Button1_Click. Тогда мы можем передать информацию страничке на которую переходим следующим образом:
На страничке WebForm2.aspx мы легко можем узнать по какой кнопке выполнен Redirect:
4.2.2 Использование cookie
Cookie(печенье) — небольшие файлы, создаваемые на жестком диске или в памяти браузера машины клиента, позволяющие Web серверам хранить в них информацию.
Это достаточно удобный метод хранения информации, но, и он не лишен некоторых недостатков, таких как: возможность удаления cookie пользователем или принудительного отключения, доступность только из встроенных браузеров, доступность и открытость хранимой информации.
Для получения доступа к cookie в приложении должна быть подключено пространство имен:
Для работы с cookie используется классы Request и Response. Следующий пример демонстрирует создание и использование cookie. На форме решения поместим три контрола: Button, Label и TextBox. В обработчиках событий запишем следующий код:
Результат работы показан на Рис.23.
Рис.23. Пример использования cookie
В файле C:\Documents and Settings\Имя_Компьютера\Cookies\, найдем наше «печенье». Имя cookie включает имя_пользователя_компьютера@имя_сервера[1] (где имя_сервера localhost, yandex и т.п.) при старте будет записано:
После регистрации и второго вызова:
Параграф 4.3. Сеансы и их использование
4.3.1. Понятие сеанса в ASP.NET
Необходимость использования сеансов возникла из за потребности хранения больших объемов информации, хранение которых уже рассмотренными нами способами либо невозможно, либо нецелесообразно.
Сеанс (сессия) объединяет некоторую информацию серии запросов с одного адреса (одного клиента) в течении определенного времени. Каждый клиент, который получает доступ к сайту, получает свой сеанс и, как следствие, свою коллекцию данных. Сеанс начинается, когда пользователь в первый раз запрашивает страницу сайта, и заканчивается, когда приложение явно закрывает сеанс или когда превышено заданное время ожидания.
ASP.NET содержит необходимую структуру данных состояния каждого сеанса, позволяющую:
Автоматически определять и классифицировать запросы, приходящие от клиента.
Хранить данные с ограниченной областью действия на сервере.
Создавать соответствующие события управления жизненным циклом сессии (Session_OnStart, Session_OnEnd и т. д.).
Автоматически освобождать данные сеанса, если клиент не посещает сайт определенный период времени.
Каждый активный сеанс ASP.NET имеет идентификатор, представляющий собой 120-разрядную строку — SessionID, состоящую из допустимых в URL-адресах знаков ASCII. Алгоритм генерации значений SessionID гарантирует уникальность (во избежание совпадений идентификаторов сеансов) и случайность. Нельзя воспользоваться значением SessionID для вычисления значения идентификатора сеанса. В зависимости от параметров приложения строка SessionID передается между сервером и клиентом посредством файлов cookie или с помощью включения значения SessionID в URL-адрес. Этот идентификатор является единственным фрагментом информации сессии, которая передается между сервером и клиентом.
Когда клиент предъявляет идентификатор сеанса, то сервер находит соответствующий сеанс, извлекает данные, преобразует их в объекты и помещает в коллекцию данных, откуда данные становятся доступны программному коду страницы запроса. Идентификаторы у разных клиентских запросов различны, как результат — доступ возможен только к своей коллекции данных. До тех пор, пока клиент не использует сеанс для сохранения данных, идентификатор сеанса при каждом запросе генерируется вновь (иначе, сеанс сохраняется только если было сохранение данных). Это позволяет сократить затраты памяти и время на сохранение данных и идентификатора сеанса.
Основной недостаток сеансов — это затраты памяти, которые при большом объеме хранимой информации и большом числе обращений к серверу могут значительно снизить его производительность.
4.3.2. Свойства и методы объекта Session
Для организации работы с сеансами используется класс System.Web.SessionState.HttpSessionState, который на web странице приложения доступен как встроенный объект Session.
Перечислим основные свойства и методы HttpSessionState:
Основные свойства
CodePage — возвращает или задает идентификатор кодовой страницы для текущего сеанса.
Contents — возвращает ссылку на текущий объект состояния сеанса. Иначе, семейство Contents объекта Session содержит все хранящиеся переменные сеанса.
Count — возвращает число элементов в коллекции состояния сеанса.
IsCookieless — возвращает значение, показывающее, был ли идентификатор сеанса внедрен в URL-адрес или сохранен в файле cookie.
IsNewSession — возвращает значение, показывающее, был ли создан сеанс с текущим запросом.
IsReadOnly — возвращает значение, показывающее, доступен ли сеанс только для чтения.
IsSynchronized — возвращает значение, показывающее, синхронизирован ли доступ к коллекции значений состояний сеанса (потокобезопасный доступ).
Item — возвращает или устанавливает индивидуальные значения сеанса. (в C# является индексатором класса HttpSessionState).
Keys — возвращает коллекцию ключей всех значений, сохраненных во время сеанса.
LCID — возвращает или задает идентификатор языка и стандартов (LCID) текущего сеанса.
Mode — возвращает текущий режим состояния сеанса.
SessionID — возвращает уникальный идентификатор сеанса, применяемый для определения сеанса.
StaticObjects — возвращает коллекцию объектов, объявленных тегами файла приложения ASP.NET: global.asax.
SyncRoot — возвращает объект, который можно использовать для синхронизации доступа к коллекции значений состояния сеанса.
Timeout — возвращает и задает допустимое время ожидания (в минутах) между запросами перед завершением сеанса провайдером состояния сеанса.
Основные методы
Abandon — уничтожает все объекты, хранимые в объекте Session и освобождает их ресурсы. Если метод Abandon не вызван явно, сервер уничтожит объекты при истечении времени ожидания сеанса. При вызове метода Abandon запрашивается удаление текущего объекта Session, но он не удаляется до тех пор, пока не будут обработаны все команды сценария на текущей странице. (можно обращаться к переменным, хранимым в объекте Session, с той же страницы, где расположен вызов Abandon, но не с любой последующей веб-страницы).
Add — добавляет новый элемент в состояние сеанса.
Clear — удаляет все значения из состояния сеанса.
CopyTo — Копирует коллекцию значений состояния сеанса в одномерный массив, начиная с заданного индекса массива.
Equals — (унаследовано от Object)- определяет, равны ли два экземпляра Object.
GetEnumerator — возвращает перечислитель всех значений состояния сеанса для текущего сеанса.
GetHashCode — (унаследовано от Object) — служит хеш-функцией для конкретного типа, пригоден для использования в алгоритмах хеширования и структурах данных, например в хеш-таблице.
GetType (унаследовано от Object) — возвращает Type текущего экземпляра.
Remove — удаляет элемент из коллекции состояний сеанса.
RemoveAll — удаляет все значения состояния сеанса.
RemoveAt — удаляет элемент по заданному индексу из коллекции состояний сеанса.
ToString (унаследовано от Object) — возвращает строку, которой представлен текущий Object.
4.3.3. Пример использования сеанса
Рассмотрим пример хранения некоторого класса RegInfo с использованием сессии. Для этого объявим класс в, котором пользователь будет накапливать некоторую регистрационную информацию:
Несколько примеров использования свойств и методов Session:
Использование метода IsCookieless:
При значении свойства cookieless=»true», URL запроса будет выглядеть примерно так:
С помощью метода Remove семейства Contents можно выборочно или полностью удалить ссылки на переменные, которые добавлялись при соответствующем состоянии сеанса:
4.3.4. Настройка состояния сеанса
Конфигурационные данные хранятся в текстовом файле Web.config (в Visual Studio .Net генерируется автоматически), находящемся в каталоге приложения. Этот файл определяет условия выполнения приложений ASP .NET — такие как параметры отладки и системы безопасности. Состояние сеанса также хранится в файле Web.config.
Пример фрагмента файла Web.config:
Параметр mode может иметь значения: «InProc» — (по умолчанию) внутренний режим состояния сеанса (информация хранится в том же процессе, где и рабочие потоки), «off» — отключено управление состоянием сеанса, «StateServer» — использование отдельной службы сервера для управления сеансом, «SqlServer» — использование базы данных SQL для хранения состояния сеанса.
Если в приложении не используются сеансы, то для некоторого повышения производительности целесообразно задать mode=»Off», mode=»InProc» обеспечивает высокую производительность, но не сохраняет сеанс при перезапуске страницы.
При использовании mode=»StateServer», служба управления состоянием сеанса (служба ASP.NET State Server), запущенная на сервере, дает базовый уровень защиты при перезапуске процесса, что, естественно, влечет дополнительные временные издержки. В этом случае обязательно указание параметра stateConnectionString (TCP/IP компьютера — служба может быть запущена и на другом компьютере). Служба запускается из Administrative Tools панели управления, пункт Services, найти ASP.NET State Server и через контекстное меню строки с именем сервера выполнить пункт меню Start. Через контекстное меню, пункт Properties, выполняется и установка Startup Type (например, на автоматический запуск — выбрать Automatic).
При использовании mode=»SqlServer», Sql сервер обеспечивает самый надежный, но и самый медленный метод хранения данных. Метод требует задания параметров sqlConnectionString, включая пароль доступа (явно нежелательно при неиспользовании интегрированных методов доступа), установку специальных хранимых процедур для сохранения и извлечения информации о сеансе, и временных баз данных для сеансов.
ASP.NET включает для этой цели сценарий Transact-SQL с именем InstalSqlState.Sql (каталог Winnt\Microsoft.Net\Framework\номер_версии, сценарий можно запустить используя утилиты SQL Server OSQL.exe или Query Analyzer). После выполнения сценария средства все указанные средства, обеспечивающие работу с сессией и хранения данных в Sql БД становятся доступными, в том числе и после перегрузке компьютера.
Значении параметра cookieless=»true» означает, что идентификатор сеанса внедряется в URL-адрес.
Значение timeout устанавливает время жизни сеанса.
Глава 5. Класс — HttpApplication и состояние приложения
В ASP.NET есть специальный класс — HttpApplication (System.Web.HttpApplication), представляющий все приложение. Он контролирует его общее состояние, и обрабатывает глобальные события. В основном этот класс используется для хранения объектов уровня приложения, к которым может получить доступ любой клиент.
Класс HttpApplication предоставляет программный доступ к методам HttpApplication.Init и HttpApplication.Dispose и событиям Application_OnStart и Application_OnEnd и др. Кроме того, из него есть доступ ко всем public свойствам и событиям во всех модулях приложения.
Глава 6. Новые возможности передачи данных между формами в ASP.Net 2.0
В ASP.NET 2.0 появилась возможность непосредственно передавать данные, введенные на одной странице в некоторой вводной форме (в поле элемента управления) другой странице формы одного решения. Причем, данный механизм позволяет получать в вызываемой форме значения свойств элементов из вызывающей формы. Для этого в ASP.NET 2.0 для ряда контролов введено дополнительное свойство — PostBackUrl, позволяющие указать какой именно странице решения должна быть передана информация из элементов управления вызывающей страницы, если обращение к серверу инициировано этим элементом управления.
Например, создадим решение, имеющее две формы (Default и WebForm2). Разместим на форме Default контролы TextBox и Button. Для контрола Button установим свойство PostBackUrl в значение WebForm2 (Рис.24, 25).
Рис.24. Решение сайта
Рис.25. Решение сайта
Выполним решение сайта. Убедимся, что даже при отсутствии обработчика нажатия кнопки, сервер, при нажатии кнопки «Передать», выполнит редирект на WebForm2. Но не только пользователь будет переадресован на страницу WebForm2.aspx, но и вся информация об элементах управления формы Default.aspx, будет также передана форме WebForm2.aspx. Для реализации этой возможности, ASP.NET 2.0 проверяет формы на наличие в них элементов управления с атрибутом PostBackUrl и, при их наличии, создает для страницы дополнительное скрытое поле __PREVIOUSPAGE, которое и содержит информацию о состоянии элементов формы. Эта информация может быть извлечена на вызываемой странице через свойство PreviousPage.
Для демонстрации возможности передачи информации (из контрола TextBox формы Default.aspx в форму WebForm2.aspx) на странице WebForm2 разместим контрол Label и контрол TextBox.
В файле WebForm2.aspx.cs напишем следующий код:
Теперь, при нажатии в форме Default.aspx кнопки «Передать» будет вызвана форма WebForm2, и в ней отобразится информация, введенная в textBox1 формы Default.aspx (Рис.26.).
Рис.26. Выполнение решения сайта
Другая возможность получения доступа с использованием PreviousPage показана на Рис.27. В форме Default мы объявили public переменную viI и при загрузке присвоили ей значение 10.
Далее, используя приведение PreviousPage к странице родителю мы можем получить доступ к public свойствам и переменным вызвавшей страницы.
Рис.27. Выполнение решения сайта
Отметим, что PreviousPage содержит информацию практически обо всей вызвавшей странице: Title, Header, IsVal >
Лекция 1. Что такое ASP.NET. Инсталляция и тестовый проект.
Введение
Microsoft .NET Framework — это платформа для создания, развертывания и запуска Web-сервисов и приложений. Она предоставляет высокопроизводительную, основанную на стандартах, многоязыковую среду, которая позволяет интегрировать существующие приложения с приложениями и сервисами следующего поколения, а также решать задачи развертывания и использования интернет-приложений. .NET Framework состоит из трех основных частей — общеязыковой среды выполнения (common language runtime), иерархического множества унифицированных библиотек классов и компонентной версии ASP, называемую ASP.NET.
ASP.NET – это часть технологии .NET, используемая для написания мощных клиент-серверных интернет приложений. Она позволяет создавать динамические страницы HTML. ASP.NET возникла в результате объединения более старой технологии ASP (активные серверные страницы) и .NET Framework. Она содержит множество готовых элементов управления, используя которые можно быстро создавать интерактивные web-сайты. Вы также можете использовать сервисы, предоставляемые другими сайтами, прозрачно для пользователей вашего сайта. В общем, возможности ASP.NET ограничены только вашим воображением.
Давайте обсудим, что такое динамические страницы HTML и чем они отличаются от статических. Статическая страница содержит код на языке гипертекстовой разметки HTML. Когда автор страницы пишет ее, он определяет, как будет выглядеть страница для всех пользователей страницы. Содержание страницы будет всегда одинаковым независимо от того, кто и когда решит ее просмотреть. Языка HTML вполне достаточно для отображения информации, которая редко изменяется и не зависит от того, кто ее просматривает. Страница HTML — простой ASCII-текст, следовательно, клиент может работать в любой операционной системе.
Совершенно понятно, что если сформировать web-страницу, описав ее структуру средствами HTML, она будет совершенно статична в смысле содержимого. То есть при просмотре в браузере она будет нести в себе точно ту же информацию, что была в нее записана в момент создания, и переданные пользователем данные не могут быть использованы для модификации содержимого отображаемых ему страниц: он сможет увидеть только то, что предварительно было записано в конечный набор файлов.
Но что, если мы хотим отобразить на странице текущий курс евро или прогноз погоды? Если мы написали страницу HTML вчера, сегодня она уже устареет. Следовательно, мы должны уметь создавать динамические страницы. Динамическое наполнение страницы – это информация, содержание которой определяется тем, кому она предназначена, и которая отличается от просмотра к просмотру. Оно позволяет обеспечить двусторонний обмен информацией – от клиента к серверу и обратно.
Динамическими принято называть web-страницы, которые перед отправкой клиенту проходят цикл обработки на сервере. В самом простом случае это может быть некоторая программа, которая модифицирует запрашиваемые клиентом статические страницы, используя параметры полученного запроса и некоторое хранилище данных. Даже при такой примитивной организации «неразрешимая» задача из предыдущего абзаца обретает очевидное решение: достаточно подготовить всего одну статическую страницу – шаблон – и перед отправкой страницы программно подставлять в него значение, полученное сегодня из банка или метеобюро.
Большинство страниц на ранних стадиях развития интернета были статическими. Последние 10 лет растет количество динамических страниц. И это понятно, пользователи интернет хотят не только читать готовую информацию, а быть активными действующими лицами. Например, они заказывают товары в интернет-магазине, пишут дневники, участвуют в конкурсах. Информационные порталы обновляют новости каждую минуту. Динамические страницы могут подстраиваться под конкретного пользователя, а также реагировать на его действия в браузере. Каким же образом? Для этого придумано множество технологий. Например, того, чтобы идентифицировать пользователя и сохранить его настройки для данного сайта, применяются файлы-cookies.
Существуют языки, способные динамически изменять содержимое веб-страницы. С одной стороны, это языки скриптов, выполняющиеся непосредственно у клиента. Примеры скриптовых языков — JavaScript и VBScript. Скрипты на этих языках встроены в код HTML, который сервер посылает браузеру. Сценарии, выполняемые на стороне клиента, выделяются тегами и . Браузер интерпретирует этот код и показывает пользователю результат. Сам код можно просмотреть через View Source браузера. Естественно, эти программы не могут быть большими. Например, если нужно выполнить поиск в базе данных, мы не может отправить пользователю все ее содержимое. Но скрипты могут проверить правильность запроса, введенного в форму, тогда не придется перезагружать сервер обработкой неправильных запросов. Некоторые программисты создают на JavaScript анимационные эффекты. Одна студентка intuit.ru желала найти скрипт, который бы отправлял SMS-сообщения. Увы, это невозможно. Выполняемых на стороне клиента сценариев недостаточно для создания полноценных динамических страниц. Даже если на странице используется JavaScript, анимированные картинки .gif, она называется статической.
Динамическая веб-странице должна быть создана «на лету» программой, исполняющейся на интернет-сервере. Широко применяются механизм шлюзов CGI(Common Gateway Interface). Вначале пользователь получает статическую страницу с формой. Вам известно, что в теге FORM существует атрибут ACTION. Именно он задает адрес (URL) исполняемого приложения. На сервере находятся исполняемые файлы программ, написанных, например на C/С++ или Дельфи, которые по протоколу HTTP принимают данные из входного потока или из переменных окружения и записывают в стандартный выходной поток готовую страницу.
Пользователю в ответ на запрос посылается HTML код, который был специально сгенерирован для него. Это может быть, например, результат поиска в поисковой системе. CGI -скрипты могут быть написаны на интерпретируемом языке (Perl) или даже скрипте командной строки. Входной и выходной потоки переназначаются. На вход интернет-сервер принимает данные, введенные пользователем. После обработки полученных данных, пользователю возвращается результирующая страница. При исполнении cgi-программа загружается в память сервера, а при завершении – удаляется. Когда 100 клиентов одновременно обращаются к серверу, в памяти создаются 100 процессов, для размещения кода каждого из которых нужна память. Это отрицательно сказывается на масштабируемости. Напомним, что масштабируемость — это возможность плавного роста времени ответа программной системы на запрос с ростом числа одновременно работающих пользователей.
Для решения это проблемы Microsoft была предложена альтернатива – ISAPI(Internet Server Application Programming Interface)-расширения и фильтры. Вместо исполняемых файлов используются DLL – библиотеки. Код DLL находится в памяти все время и для каждого запроса создает не процессы, а нити исполнения. Все нити используют один и тот же программный код. ISAPI –приложение выполняется в процессе IIS-сервера. Это позволяет повысить производительность и масштабируемость.
ISAPI-расширения можно создавать в Visual Studio C++ 6.0, пользуясь мастером.
У ISAPI тоже есть недостатки, относящиеся к разработке. Если мы меняем исходный код dll, мы должны его откомпилировать и поместить в исполняемую директорию сервера. Но так как предыдущий вариант dll находится в памяти, необходимо остановить сервер, чтобы получить доступ на изменение файла. В это время клиенты не смогут получить в сервера ни один документ, и, конечно, будут не удовлетворены.
Скриптовые языки, исполняющиеся на стороне сервера – php и asp. Технология asp была разработана Microsoft в 90-х годах.
Выполнение кода asp поддерживается ISAPI-расширением сервера. В диалоге конфигурации сервера IIS определяются способы обработки файлов с различными расширениями. Для обработки URL-адреса с расширением в установках сервера определен файл asp.dll. Файлы asp отправляются к нему на обработку. На вход поступает asp, а на выходе имеем поток HTML-кода.
Пример файла asp:
Тег сигнализирует asp, что в нем находится код, который он должен обрабатывать на сервере. Выполняется скрипт на языке, который указан в директиве Language. Оператор Response.Write записывает текст в выходной поток сервера, таким образом, он становится частью HTML-страницы, отправленной пользователю.
Технология asp была ограничена по своим возможностям. Он использовал скриптовые языки, которые имеют меньше возможностей, чем полнофункциональные языки программирования. Код asp был встроен в HTML в виде специальных тегов, что создавало путаницу. Кусочки asp были разбросаны по нему, как изюм в булке. Но HTML код обычно создают дизайнеры, которые умеют «делать красиво», а asp – программисты, которые заставляют все это работать. В ASP.NET вы можете держать код asp и HTML в разных файлах.
Скриптовые языки не поддерживают строгую типизацию. Что это значит? Вы можете не описывать переменную до ее использования и можете присваивать ей значения разных типов. Это удобно, но создает почву для ошибок. Например, у вас есть переменная x1, и вы присваиваете ей значение 1, но вы сделали опечатку и по ошибке написали x2=1. Будет создана новая переменная x2, а значение x1 не изменится. В языке со строгой типизацией компилятор заметит, что переменная x2 не описывалась, и выдаст ошибку.
В 2000 году на конференции разработчиков в качестве части новой технологии .NET Microsoft представила ASP+. С выходом .NET Framework 1.0 она стала называться ASP.NET.
ASP.NET — это не продолжение ASP. Это концептуально новая технология Microsoft, созданная в рамках идеологии .NET. В ASP.NET заложено все, для того, чтобы сделать весь цикл разработки веб-приложения более быстрым, а поддержку более простой. ASP.NET основана на объектно-ориентированной технологии, но сохранила модель разработки asp: вы создаете программу и помещаете ее в директорию, выделенную сервером, и она будет работать. В ASP.NET появилось много новых функций, а существовавшие в asp значительно усовершенствованы.
В ASP.NET используются компилируемые языки. Во время компиляции проверяется синтаксическая корректность исходного текста. Скомпилированный в промежуточный язык код выполняется быстрее, и он будет таким же независимо от языка, который мы используем. Компилируемые языки поддерживают строгую типизацию.
Компиляция происходит на сервере в момент первого обращения пользователя к странице. Если программист изменил текст страницы, программа перекомпилируется автоматически. При написании кода можно использовать набор компонентов, поставляемых с .NET.
Платформа .NET Framework предоставляет приложениям среду выполнения, сама непосредственно взаимодействуя с операционной системой. Выше лежит интерфейс ASP.NET приложений, на котором в свою очередь базируются веб-формы (ASP.NET страницы) и веб-сервисы. Интерфейс .NET Framework позволяет стандартизировать обращение к системным вызовам и предоставляет среду для более быстрой и удобной разработки. CLR обеспечивает единый набор сервисов для всех языков.
ASP.NET использует технологию доступа к данным ADO.NET, которая обеспечивает единый интерфейс для доступа к базам данных SQL Server и файлам XML. Кроме того, усиленная модель безопасности позволяет обеспечивать защиту клиента и сервера от несанкционированного доступа.
В 2004 году появилась версия ASP.NET 2.0(бета-версия, окончательный выход – конец 2005-начало 2006). Как утверждается, эта версия позволяет сократить объем кодирования на 70%. Новые возможности версии 2.0 – например, использование шаблонов дизайна страниц(Master Page), упрощенная локализация Web-приложений, более 50 новых серверных элементов управления. Цели, которые преследовали разработчики новой версии – повысить скорость разработки сайтов, масштабируемость, легкость поддержки и администрирования сайтов, скорость работы сервера. Появилась панель остнастки MMC (консоль управления Microsoft), предоставляющая графический интерфейс для управления настройками ASP.NET. Изменять настройки проекта теперь можно и через web-интерфейс. ASP.NET 2.0 поддерживает работу на 64-битных процессорах. Сервис персонализации (personalization) предоставляет готовое решение для хранения персональных данных, непосредственно характеризующих пользователя сайта, так называемого профиля пользователя (Profile).
Шаблоны дизайна, темы и скины позволяют независимо дизайн всего сайта отдельно от его функциональности, темы включают графику и каскадные таблицы стилей.
Предыдущие версии Visual Studio для проектов ASP.NET требовали наличия на машине разработчика сервера IIS. Теперь сервер встроен в среду разработки.
ASP.NET 2.0 и Visual Studio 2005 предоставляют инструменты для легкого построения локализируемых сайтов, которые определяют предпочитаемый язык пользователя и посылают ему страницы на его языке.
Возможность прекомпиляции позволяет обнаружить ошибки до загрузки страниц на сервер. Можно не хранить на сервере исходные страницы aspx, тем самым защищая свою интеллектуальную собственность.
В ASP.NET 2.0 встроена технология автоматического обновления кэширования баз данных. Данные, полученные из базы, хранятся на сервере и он не обращается к базе для обработки повторного запроса. При изменении базы данных кэш обновляет свое содержимое.
ASP.NET — это технология, а не язык, и позволяет программировать на разных языках – С#, Visual Basic, J#. В платформе .NET все языки равны, но некоторые равнее(Дж. Оруэлл). Вот таким языком и является С#, потому что он был специально создан для этой платформы. Программирование C# позволяет в полной мере использовать концепции, методы и паттерны объектно-ориентированной разработки. Язык Visual Basic 8.0 наделен почти теми же возможностями. Чтобы научиться ASP.NET, вам нужно знать основы HTML, а знание asp не обязательно. Оно может даже помешать, так как придется менять образ мышления. Также для понимания многих желательно знать CSS и JavaScript.
Процесс инсталляции
ASP .NET 2.0 можно установить на компьютерах с ОС Windows 2000 с Service Pack 4, Windows XP с Service Pack 2 и более поздними версиями Windows. Готовые сайты предпочтительно устанавливать на Windows Server 2003.
Для разработки приложения можно использовать любую среду разработки или даже текстовый редактор, при условии, что у вас есть доступ к IIS. Если же вы хотите воспользоваться всей мощью Microsoft .NET Framework и ASP.NET и при этом, затратить как можно меньше усилий, то нужно воспользоваться средой разработки, специально разработанной для программирования ASP.NET 2.0.
Если вы приобретете Visual Studio .NET 2005, то для работы достаточно будет только его. .NET Framework содержится на дисках. В его состав входит Visual Web Developer, который позволяет создавать профессиональные веб-приложения, а также desktop-приложения на разных языках программирования. Продукты Microsoft выпускаются на DVD, но есть набор из двух CD от «Мегасофт». Visual Studio .NET 2005 требует около 2 Гигабайт дискового пространства. При этом инсталлируется ASP.NET 2.0, среда разработки, SQL Server Express, встроенный веб-сервер, Crystal Reports со специальными элементами управления для ASP.NET 2.0.
Бесплатно распространяемое программное обеспечение.
Visual Web Developer 2005 Express Edition – свободно распространяемая среда предназначенный для новичков и студентов, доступная по адресу http://msdn.microsoft.com/vstudio/express/vwd/. Список отличий VWD от Visual Studio.NET 2005 невелик и для начинающих несущественен, он приведен здесь: http://msdn.microsoft.com/vstudio/products/compare/default.aspx
Инсталлятор VWD имеет объем 2,8 Мб, но в процессе инсталляции он загрузит еще 40 Мб и 80 Мб, если захотите установить документацию. При этом также будет установлен .NET Framework с ASP.NET 2.0.
Системные требования – процессор с минимальной скоростью 600 МГц, 128 МБ памяти и 1.3 ГБ дискового пространства. После инсталляции нужно будет зарегистрировать свою установку, это совершенно бесплатно.
В качестве среды разработки вы можете выбрать WebMatrix. Эта программа совмещает в себе редактор и http-сервер. Ее можно загрузить на http://www.asp.net/WebMatrix.
У WebMatrix инсталлятор размером всего 1.2 Мб, но у него меньше возможностей, чем у VWD. Но, в общем, эти среды разработки похожи. У WebMatrix есть неприятная особенность – она дает запрос на сохранение во время закрытия файлов, которые не редактировались. VWD Express позволяет одним нажатием кнопки открыть Web-интерфейс конфигурирования проекта. В VWD работает технология IntelliSense, которая автоматически предлагает возможные в данном месте элементы кода.
Если вы решили работать с WebMatrix, вы должны установить на своей машине .NET Framework 2.0 и ASP.NET 2.0.
Если у вас операционная система Windows Server 2003, то .NET Framework уже предустановлен. Вы можете проверить, есть ли вас директория %WINSDIR%Microsoft.NETFramework. Если нет, вы можете ее загрузить на сайте Microsoft. Последние версии находятся по адресу http://msdn.microsoft.com/netframework/downloads/updates
На данный момент это .NET Framework 2.0, но к моменту, когда вы будете читать эту лекцию, могут появиться более новые версии. Вы можете скачать новую версию, даже если у вас уже есть другая. Они будут существовать на компьютере одновременно в поддиректориях %WINSDIR%Microsoft.NETFramework, с именем, соответствующим номеру версии. Можно сказать, что каждая версия представляет собой сборку. Система версий поддерживается для всех приложений, созданных с использованием .NET Framework.
Там вы увидите ссылки на .NET Framework для разных архитектур компьютера.
При желании загрузите .NET Framework Version 2.0 SDK, которая содержит наряду с .NET Framework Version 2.0 SDK документацию и примеры, которые могут оказаться полезными.
По адресу http://asp.net/default.aspx можно найти много полезных для разработчиков программных продуктов, примеров кода и статей.
IIS(Internet Information Server) находится на инсталляционном диске Windows 2000/XP, но предустановлен только на серверах. Его можно установить, зайдя в Control Panel->Add or Remove Programs->Add/Remove Windows Components. Компьютер попросит вас вставить инсталляционный диск.
IIS может понадобиться, если вам нужен полноценный сервер для работы в интернет, а не просто на своем компьютере или в локальной сети или вы решили набирать текст в обычном редакторе. Для работы на своем компьютере во все эти среды разработки встроен сервер Cassini, который первоначально появился как часть WebMatrix. Символ WebMatrix – планета Сатурн, а Кассини — известный исследователь Сатурна. Предыдущие версии Visual Studio требовали наличия IIS, но теперь Cassini встроен и в Visual Studio 2005, что позволяет работать даже в Windows XP Home Edition.
Примеры будут даваться как для WebMatrix, так и Visual Studio. Некоторые примеры требуют VWD Express или Visual Studio.
Сообщества разработчиков.
Через меню помощи Visual Web Developer Express можно зайти на сайты форума по ASP.NET. А вот адреса сайтов на русском языке:
* http://www.aspnetmania.com
* http://www.gotdotnet.ru/
* http://www.sql.ru/
* http://dotsite.ru/
* http://www.rsdn.ru/
Вы можете завести пробный хостинг на http://europe.webmatrixhosting.net/russia/default.aspx.
Первый проект
Вначале решите, в какой директории будете создавать страницы. Все файлы, находящиеся в одной директории, считаются единым проектом.Запустите выбранную вами среду разработки. Выберите пункт меню File-New-Website. Появится диалоговое окно. Назначьте в нем имя проекта и выберите язык программирования С#.
По умолчанию проект создается в файловой системе. По желанию его можно создать на HTTP или FTP-сервере. Из файловой системы проект всегда можно скопировать на сервер нажатием одной кнопки в заголовке Solution Explorer.
В проекте будет создана страница default.aspx. Выберите ее, и появится окно редактирования с закладками Design и Source. Не меняя ничего, щелкните на кнопке со стрелкой, чтобы просмотреть страницу в браузере. Появится окно, котором спрашивается, нужно ли добавить в файл web.config возможность отладки. Нажмите OK. На панели задач должен появиться значок веб-сервера. Откроется браузер, показывающий страницу по адресу http://localhost:номерпорта/Website1/default.aspx. localhost обозначает сервер, работающий на вашем компьютере. Встроенный сервер Cassini сам назначает себе номер порта – для каждого проекта он разный. Сервер IIS обычно работает через порт 80(или 8080, если тот занят), и для него номер порта указывать не нужно. При этом ваша страница будет скомпилирована.
Пока что страница в бразере пустая.
Но исходный код этой страницы не пустой. Программа сгенерировала код для вас.
Первые страницы на ASP.NET
Первые страницы на ASP.NET дают первоначальное знакомство с солидной технологией создания веб-приложений. Не усложняя первые шаги фреймворками WebForms, MVC, WebAPI создадим простые веб-страницы с внедренным программным кодом для двух обработчиков представлений — ASPX и Razor. Обработчики кода, называемые еще механизмами визуализации или движками, предназначены для динамического создания веб-страницы путем замены программного кода соответствующей html разметкой.
Движок ASPX — стандартная модель добавления кода на веб-страницу ASP.NET. ASPX использует блоки объявления типов, процедур и переменных и встроенный блок отрисовки html разметки . Модель добавления программного кода ASPX с некоторыми изменениями перешла в ASP.NET из первой платформы ASP.
Razor новый механизм визуализации программного кода в html странице. Razor это интеллектуальный движок динамического создания html разметки. Имеет понятный синтаксис и упрощает внедрение кода в веб-страницу. Для отличия программного кода от html кода использует символ @, в сочетании с фигурными скобками и без скобок.
Для создание первых веб-страниц будем использовать бесплатную программную среду для работы с веб-сайтами WebMatrix. На текущий момент создана 3-я версия этого, достаточного для создания профессиональных сайтов, инструмента программирования. Скачать ее можно с сайта компании Microsoft по ссылке WebMatrix. В состав программы WebMatrix входит все необходимое для создания и тестирования веб-сайтов на основе ASP.NET: редактор кода с подсветкой и IntelliSense, вебсервер IIS Express, система управления базами данных SQL LocalDB.
Сайт включает из три страницы: главная и две одинаковые страницы динамического создания таблиц на движках ASPX и Razor. Размерность таблицы можно задавать в строке запроса двумя параметрами. Надо сказать, что в принципе оба обработчика эффективно создают html разметку, но предоставляют разный комфорт работы.
Движок ASPX требует заключения всех частей и частичек программного кода в блоки вида . Типы, процедуры и переменные можно объявлять в блоке . Атрибут runat=»server» отличает данный блок от блока javascript и обозначает обработку кода в этом блоке непосредственно на сервере.
Листинг №1 Вебстраница на движке ASPX
Ниже показан код веб страницы для обработчика внедренного программного кода Razor. Обратите внимание на гармоничное слияние html кода и выражений на языке C#. Движок Razor позволяет использовать html теги непосредственно внутри программного кода: интеллектуальная составляющая обработчика ловко отделяет html разметку от программного кода C#.
Листинг №2 Вебстраница на движке Razor
Протестировать работу сайта можно несколькими способами:
- MS Visual Studio — Файл->Открыть веб-сайт ->Выбрать папку в которую распакован архив Запуск в браузере (или клавиша F5)
- WebMatrix — Открыть->Папка->Выбрать папку в которую распакован архив сайта->Выбор папки Запуск
- Распаковать архив в физическую папку локального или интернет сайта. Запустите сайт в браузере по его URL адресу.
В заключении можно добавить, что для пользователя сайта, информация о том на каком движке работают веб-страницы не сильно важна. Но программист, поработав с каждым обработчиком внедренного кода, наверняка сделает выбор в пользу Razor.
Asp построение страниц asp
Многие веб-сайты предоставляют доступ к своему содержимому только вошедшим пользователям (прошедшим проверку подлинности). По умолчанию ASP.NET предоставляет шаблоны проекта веб-сайта, включающие страницы, с помощью которых можно выполнить проверку подлинности.
Примечание |
---|
Примечание |
---|