Книги, научные публикации Pages:     | 1 | 2 | 3 | 4 | 5 | -- [ Страница 1 ] --

т Посвящается Тиму и Эрин Ч я живу благодаря людям, которых люблю.

Douglas J. Reiily DESIGNING Microsoft* ASP.NET APPLICATIONS Press Д. Рейли СОЗДАНИЕ ПРИЛОЖЕНИЙ Microsoft* ASP.NET Москва 2002 004.45 ББК 32.973.26-018.2 Р31 Д.

Р31 Создание Microsoft с англ. Ч М.;

Из дом Русская Редакция, 480 ил.

ISBN 5-7502-0218-6 Эта книга познакомит с флагманской технологией Mic rosoft Framework и средой исполнения CLR. Вы на учитесь разрабатывать Web-приложения в среде а также Web формы Кроме того, вы узнаете об элементах управления а в том числе о серверных HTML-элементах управления и эле ментах входных данных, о пользовательских и не стандартных элементах о том, как взаимо с SQL Server средствами и элементов управления с поддержкой данных. Отдельную главу автор по святил особенностям создания XML Web-сервисов и их организации общего доступа к данным в распределенных средах.

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

Книга состоит из 10 глав, 2 и предметного указателя.

ББК 32.973.26-018. Подготовлено к изданию по лицензионному договору с Microsoft Corpo ration, Редмонд, США.

ActiveX, JScript, Microsoft. Microsoft Press, MS-DOS, Visio Studio, Visual Basic, Visual C + +, Windows NT и Windows товарными знака ми или охраняемыми знаками корпорации Microsoft в США и/или других странах. Все другие товарные знаки являются собственно стью фирм.

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

й Оригинальное издание на английском Дуглас Рейли, й на русский Microsoft Corporation, ISBN 0-7356-1348-6 (англ) Оформление и подготовка к изданию, ISBN 5-7502-0218-6 дом Русская IX Введение XII ГЛАВА 1 ОСНОВНЫЕ СВЕДЕНИЯ О РАЗРАБОТКЕ В ASP.NET Задача: разработка динамических Web-приложений Первое решение: CGI CGI Недостатки CCI Второе решение: Преимущества ISAPI Недостатки ISAPI Лучшее решение: ASP Преимущества ASP Недостатки ASP Новое решение: ASP.NET Заключение ГЛАВА 2 КОД И СРЕДА ИСПОЛНЕНИЯ COMMON LANGUAGE RUNTIME... Краткий обзор Framework Промежуточный язык Microsoft Intermediate Language Just in Time код и данные О небезопасном коде Заключение ГЛАВА 3 ОБЪЕКТЫ И ЯЗЫКИ FRAMEWORK Решение проблемы совместимости типов в Размерные типы Ссылочные типы Встроенные ссылочные типы Классы в Framework Основные сведения о Visual Basic Старье Ч на помойку! VI Оглавление Дорогу новому! Основные сведения о языке С# Различия и С# Что можно делать в С#, но нельзя Ч в Visual Basic Заключение ГЛАВА 4 ОСНОВЫ РАЗРАБОТКИ ПРИЛОЖЕНИЙ В ASP.NET Здравствуй, мир ASP.NET! Пример Пример на Visual Методика разработки приложений в ASP.NET Создание Web-приложений в Visual Studio Visual Studio и US-сервер Первая Web-страница, созданная в Studio Другие виды ASP.NET XML Web-сервисы и HTTP-модули Конфигурирование приложений Где хранится файл Раздел authentication Раздел authorization Раздел customErrors Раздел Раздел httpModules Раздел identity Раздел pages Раздел processModel Раздел Раздел trace Заключение ГЛАВА 5 WEB-ФОРМЫ Классическая архитектура Пример проверки вводимых данных в формах ASP.NET Серверные элементы управления в ASP.NET и в HTML Элементы управления правильности вводимых данных Элемент управления RequiredFieldValidator Элемент управления CompareValidator Другие элементы проверки данных Оглавление VII Несколько элементов управления, проверяющих одно поле Элемент управления Сохранение информации о состоянии элементов управления в ASP.NET Программное управление серверными элементами управления Заключение ГЛАВА 6 СОЗДАНИЕ КОМПОНЕНТОВ Хлопоты с компонентами Классы элементов управления ASP.NET Жизненный цикл элемента управления Создание пользовательских элементов управления Подготовка для преобразования в пользовательский элемент управления Преобразование Web-страницы в элемент управления Создание нестандартных элементов управления Пример нестандартного элемента управления Создание простого нестандартного элемента управления в Visual Studio Более сложный нестандартный элемент управления Составной нестандартный элемент управления Внедрение элемента управления в пользовательский интерфейс Visual Studio Расширение режима конструктора Заключение ГЛАВА 7 РАСПРЕДЕЛЕНИЕ СЕРВЕРОМ И КЛИЕНТОМ Разработка клиентских сценариев Клиентские сценарии в ASP.NET Инициирование обращения к серверу из пользовательских элементов управления Создание расширенных элементов управления на стороне клиента Заключение ГЛАВА 8 ВРЕМЯ ЗАНЯТЬСЯ ДАННЫМИ! XML как универсальный язык данных Сравнение существующих решений форматирования данных с подходом на основе XML ли Интерфейс VIM Оглавление Основные сведения об Краткий экскурс в ADO Различия между ADO и ADO.NET Использование ADO.NET в ASP.NET Классы SqICIient и Преобразование в Заключение ГЛАВА 9 ДАННЫЕ И ФОРМЫ ASP.NET Доступ к данным с применением Доступ к данным с использованием форм ASP.NET Серверный элемент управления DataCrid Изменение DataGrid в конструкторе Visual Studio DataGrid в Visual Basic Серверный элемент Repeater Основы работы с элементом управления Repeater Создание страниц ввода данных Создание пользовательского интерфейса Обработка ввода данных Заключение ГЛАВА 10 XML WEB-СЕРВИСЫ Стандарты XML Web-сервисов Создание простого XML Расширение и тестирование XML Web-сервиса Использование свойств атрибута WebMethod Обращение к простому XML Web-сервису XML Web-сервисы и программы командной строки Реальный XML Web-сервис: публикация статей Параметры безопасности Создание и XML Web-сервиса Обращение к XML Web-сервису Возможные усовершенствования Заключение Приложение А Приложение Б Предметный Об авторе Я принадлежу к тем немногочисленным которым удалось после того, как у них был обнаружен рак пече ни. Такая беда приключилась, когда я работал над этой книгой, и параллельно с литературной деятельностью мне пришлось прой ти курс То, что почти четыре года спустя, я пишу эти строки, я приписываю фортуне, отличным технологиям и хо рошим людям. в ряду хороших людей Ч доктор Гер дес Gerdes) из Ракового памяти Слоуна Кэттеринга (Memorial Sloan Cancer Center) и его секретарь Джоанн Бут-Песантес (Joanne Booth-Pezantez). Д-р Гердес не стал ограни чиваться простой типа мы не знаем, что это за пятно на печени Дуга. Для меня он больше чем доктор Ч он стал тем, к кому я могу обратиться за советом и в том ужасе, торым для меня стал наследственный полипоз корень проблем со здоровьем з моей семье. Подробности об этом и других наследственных раковых кишечника вы можете узнать на сайте Я также поблагодарить двух Фредов [Фреда Стодолак (Fred Stodolak) и Фреда Палиани (Fred Paliani)], Джима на (Jim Hoffman), Рича Явароне (Rich lavarone), Тару О'Нейл O'Neill) и Надала (Jason из Общества любите гольфа США. Фреды создали для меня рабочую обстанов ку: я не только получил возможность работать с чудесными тех нологиями, но мог одеваться как вздумается, не следуя корпора тивным стандартам з одежде. Они также любезно разрешили мне использовать пару статей с сайта Американского лю бителей гольфа ( в качестве приме ров в глазе 10. Джим оказался самым лучшим боссом для типа меня, который предпочитает закопаться в подвале и ко выряться с компьютерами. Джим просмотрел некоторые из глав, и его откровенная оценка того, что важно, а что нет, сильно по могла мне в работе. Рич и Джейсон оказали мне неоценимую помощь, консультируя по вопросам Тара чудесным X Благодарности образом преобразила фотографию Ч теперь ее без стесне ния можно публиковать разделе Об авторе. може те мне ей не слишком уж пришлось повозиться с моим изображением! Спасибс В свободное время я много делаю для Система здра воохранения (St. Barnabas Health Care System, SBHCS). С позволения Коллинс (Kathy Collins) и Рича Уитли (Rich Wheatley) мне удалось четыре с небольшим года прорабо тать над проектами уже после того, как я пере стал работать в SBHCS на полной ставке. В SBHCS я получил можность программы в среде, со здавая крутые системы для одной из крупнейших в штате инт Кроме Рича и Кэйти я также тесно сотрудничаю с Дарси Киндред (Darcy Kindred) (она настоящая богиня интерфейса), Райаном Гримом (Ryan и Джоанн Гибсон (Joanne всех и не упомнишь, Спасибо за ваше терпение. Особую благо дарность хотелось бы выразить сотрудникам центра вызовов подразделении поведенческих дисциплин в SBHCS за то, что они терпели все задержки в реализации их системы из-за моего перегруженного графика во время работы над этой книгой.

Сьюзен Уоррен (Susan Warren) из Microsoft оказала неоценимую помощь, когда я задерживал очередную главу, потому что при меры отказывались работать. Ее терпение при поиске моих оши бок и ее готовность докапываться до сути, когда возникали се рьезные неполадки, неоценимы. Сьюзен, а также Скотт (Scott Guthrie) и Роб Ховард (Rob очень помогли мне и все авторам, об в начале работы, когда мы собрались на встрече Ч кажется, это было так давно!

На той встрече, на практическом занятии, я оказался рядом с Эндрю Andrew Duthie) из компании Craymad Enterprises, С тех пор мы переписываемся и выражаем друг другу сочувствие по электронной почте и лично на различных конференциях.

дрю вот-вот закончит свою книгу no и я рекомендую ее вам. Думаю, Эндрю Ч самый из изве стных мне сторонников технологий Microsoft. В числе людей, к ко торым я обращался за консультацией по технической части, да просто за советом, хотелось бы упомянуть Еда Колоси (Ed Colosi), Тома Диньяна (Tom Dignan), Заккарди (Michael Zaccardi) XI и Шоу (Sue Shaw). Клодетт Мур (Claudette Moore), агент, работала над больше чем, над некоторыми другими.

Спасибо за содействие в выпуске книги в свет и за помощь в при ведении моих в порядок.

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

По этой причине было важно выпустить книгу быстро, без про медления, хотя приходилось очень оперативно вносить правку, Все редакторы, которые работали над книгой: Салли Стик ни (Sally Харрис Harris), Дэвид Кларк (David Clark) и Роберт Лайон (Robert Lyon) Ч себя наи лучшим образом даже в условиях ужасающе сжатых сроков, обычных неполадок в программного продукта и по стоянно возникающих у меня идей, что лобязательно нужно до бавить еще то и это. В таких ситуациях Роберт не раз защищал меня от меня. Спасибо!

Конечно, жизнь в одной семье с когда он пишет книгу, нелегка. Моя дочь Эрин позаботилась, чтобы я не забывал, что в жизни есть кое-что еще кроме книги Ч она познакомила меня с музыкой Ани я жду не дождусь концерта этой певицы! Мой сын Тим на протяжении всего лета напоминал мне о необходимости физических нагрузок, и я регулярно следовал его советам. Спасибо за пешие и велосипедные прогулки!

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

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

look I miss all the good stuff.

when I look up, I just trip over things.

я теряю из виду много интересного, А когда то скольжу поверх Ани Когда больше года назад на конференции авторов я услышал об корпорации Microsoft, я что все это кажется слишком хорошим, чтобы быть Неужели теперь мы сможем создавать основанные на скомпили рованной программе, используя один из объектно ориентированных языков? Использовать настоящие переменные с типами и всем Создавать серверные компоненты в среде инкапсулируя все нужные моему приложению фун кции и не заботясь о СОМ-компонентов? Исполь зовать специальные проверочные компоненты (validator), чтобы чудесным образом проверять пользователями данные как на клиенте, так и на сервере? Как я уже сказал, это звучало слишком хорошо, чтобы быть На самом деле возможности оказались даже больше. В сильно упрощен процесс разработки Web-приложений.

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

Естественно, что новые функции принесли с собой определенное усложнение. Есть одна которая намного сложнее работы со всеми новшествами Microsoft Framework, Ч это попытка описать их. При работе над большинством глав этой книги чув ствовал себя так же, как автор строк, вынесенных в эпиграф. Ко выряясь с рутинными вещами, забываешь, каким классным де лом но, восхищаясь возможностями, легко спотк нуться на деталях.

Введение XIII Я попытался здесь рассказать о которые следует чтобы что-то сделать, но среда Framework В ней тысячи классов. Часто я отсылаю читателя к документации по Framework з MSDN, да вам настоятельно рекомендую пользоваться этим источником. Если нужно что-то делать со стро ками, поищите в MSDN о Если требуется выполнить операции с файлами, про странством имен Я старался не дублировать информа цию, есть в MSDN, кроме тех случаев, когда приходилось исчерпывающе описывать задачу (а эту книгу можно считать в не котором роде учебным пособием), начиная с азов и последова тельно переходя к задачам реального мира и их решениям, Кому эта книга предоставляет возможности в настоя щее время работающих с ASP, создавать более мощные и масш табируемые Web-приложения, а программистам, которые ниче го раньше не знали о Web-приложениях, начать их разрабатывать.

Из-за такой разнородности аудитории предполагаемых читателей книги мне приходится учитывать интересы и тех, кто не может похвастаться огромным опытом Специ ально для них в конце книги я поместил приложение Б с кратким справочником по языку HTML.

Поскольку в читатели с равной вероятностью могут ис пользовать Microsoft Visual Basic и я не стараюсь ори ентироваться исключительно на какой-то один из этих языков в ущерб другому. Как так и разработчики, пи шущие на и плохо знакомые с вполне поймут ис ходные тексты примеров. В книге есть примеры как на Visual Basic так и на В тех немногих случаях, когда различия в языках существенны, я показываю пример на обоих языках или чаще просто указываю на имеющиеся разли чия. Знание Framework Ч вот что вам прежде всего потре буется программирования в Структура книги Глава 1 посвящена основам разработки в Чтобы облег чить понимание материала главы, я познакомлю вас с историей технологий, которые предшествовали Если вы плохо XIV Введение знакомы с разработкой из этой главы вы по черпнете много полезных В главе 2 рассказывается управляемом коде и общеязыковой среде исполнения CLR (Common Language Runtime). В разработка прикладных про грамм коренным образом отличается от создания традиционных Если вы еще не занимались программирова нием для (а на настоящий момент мы все з этом деле но эта глава позволит зам быстро вникнуть в дела.

Вечная разработчиков, пишущих на Visual Basic и C+ (особенно тех, кто применяет оба Ч отсутствие у этих язы ков общих типов. Кроме того, дополнительные сложности создает отсутствие удобного доступа ко всем возмож ностям Win32. В главе 3 расскажу о том, как обе указанные проблемы в Framework. Глава 4 посвяще на программированию в среде ASP.NET. На примерах как на Visual и я покажу, как создавать приложения ASP.NET в Visual Studio Это очень удобная создания приложений ASP.NET, разработка в ней сильно отличается от программирования в более простых редактозах, но иногда нужны и они.

В главе 5 описано создание Web-форм ASP.NET. Все приложения ASP.NET базируются на Web-формах. Разработчикам, не знако мым с ASP-NET, но прекрасно знающим ASP, я рекомендую по знакомиться с методикой разработки в ASP.NET, так она силь но отличается от ASP. Из главы 5 VB-разработчики узнают обо всех тех особенностях, которые отличают Web-формы, от форм, к которым они привыкли.

В главе 6 описаны новые способы разработки компонентов. По мимо создания пользовательских элементов управления, в ASP.NET предоставляется возможность программировать компоненты на тех же языках, которые для создания Web-форм, или же на языках, не поддерживаемых Frame work. В главе 7 рассказывается о создании в кото рых комбинируются функции сервера и клиента, так как в ситуациях разумно выполнять задачу на клиенте, а в других Ч Из главы 7 вы узнаете, как создавать компоненты и распределять функции между клиентом и сервером.

Глава 8 посвящена Ни один экскурс в ADO.NET нельзя считать полным без рассказа об XML, именно об этом и здесь речь. В главе 9 описаны способы приме Введение XV нения с некоторыми серверными элементами управле которые позволяют создавать данных на много легче, чем вы даже можете мечтать. Кроме того, на при мере работы с реальной данных я продемонстрирую, как создать форму, которая позволяет пользователю добавлять, ре дактировать и записи.

В последней главе 10 на примере той же базы данных я покажу, как предоставить совместный доступ к XML Web-службам. Эти службы Ч новый способ предоставления функций в общий дос туп как в рамках предприятия, так и глобальной сети.

О вспомогательных материалах Исходные тексты и другие вспомогательные мо жете загрузить с издательства Русская Редакция Все примеры проверены во бета версии Microsoft Visual Studio в базовой конфигурации сис темы, состоящей из системы Microsoft Win dows 2000 Server SP2 и Web-серзера IIS (Information Internet Services). В примерах глав 8, 9 и демонстрируется доступ к базе данных, поэтому для них потребуется сервер Microsoft SQL Server 2000. В главах 9 и 10 используется база данных GolfArticles, она есть в комплекте вспомогательных материалов.

В каждой папке с примерами есть файл Readme, в котором со держатся инструкции по и работе с примерами. Не забудьте ознакомиться с ними до начала работы.

Для работы примеров этой книги необходимо следующее:

Х Microsoft Visual Studio версии бета 2 или более поздней;

Х ОС Microsoft Windows 2000 или Microsoft Windows XP;

Х Microsoft SQL Server 2000 (для примеров из глав 8, 9 и Извинения автора Я предпринял все усилия, чтобы обеспечить точность информации, содержащейся в этой книге и во вспомогательных материалах.

Несмотря на всю помощь сотрудников Microsoft и Microsoft Press, вина за любые ошибки или пробелы в конечном итоге лежит на мне. Ч это новая технология, и на момент написания книги она есе еще немного менялась. Роберт Лайон (Robert Lyon), технический редактор книги, неоднократно замечал:

XVI Введение что было предельно ясно и однозначно выражено з версии документации no частично или полно стью неверно в следующей. Трудности такого рода всегда воз никают при написании книги о программном продукте, который находится на этапе Последние версии продук та стали намного устойчивее, а значит, и уже прак тически не меняется. В новых версиях уже редко корректируют поведение Ч обычно более подробно описывают тот иной раздел.

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

Дуглас Рейли Материалы издательства Microsoft Press Издательство Microsoft Press постоянно обновляет список исправ лений и дополнений к своим книгам, он доступен на Web-узле Если у вас есть комментарии, или идеи по этой книге, их в издательство Microsoft Press no одному из пе речисленных ниже адресов.

Почтовый адрес:

Microsoft Press Attn: Designing Microsoft Applications Editor One Microsoft Way Redmond,WA Электронная почта: MSPINPUT@MICROSOFT.COM что по указанным почтовым адресам техническая поддер жка не предоставляется.

Глава Эта книга но вы не сможете з полной мере оценить эту технологию, не знал, как изменялись процессы раз работки Web-приложений на протяжении последних лет. В этой главе я вкратце познакомлю вас с традиционными способами разработки Web-приложений: с языком CGI (Common Gateway Interface), (Internet Server Application Programming Interface) и ASP-страницами (Active Server Pages). Хотя эти ренные годами способы вполне годятся создания Web-при ложений, в создание масштабируемых динамических Web-приложений выполнять гораздо проще.

,..И был создан язык разметки гипертекста (Hypertext Markup Language, HTML). И это было хорошо... В действительности о нем и вряд ли кто отзовется плохо. Это то он описывает, как текст и графические элементы.

HTML-документы содержат которые управляют отображе нием элементов документа, Ч ключевые слова (часто с атрибу тами), обрамленные знаками меньше и больше (<>) (их еще называют угловыми скобками). тэг указы вает на начало тела документа. Большинству (хотя и не у всем) тэгам соответствует парный закрывающий тэг, в котором эле 2 Глава предшествует правая наклонная черта (/), например применяющиеся разрыва строк (
) и обозначения начала (<Р>), обычно не закрываются пар ными им тэгами. Более подробно об HTML рассказано в приложе нии Б.

Языка HTML вполне достаточно отображения статической информации, которая редко изменяется и не зависит от того, кто ее просматривает. На протяжении многих лет после появления HTML такого способа статичного отображения информации было вполне достаточно. Вы себе не как трудно в на чале протекала совместная работа над документами. В то время документы в форматах WordPerfect, WordStar или Word Microsoft. Дою/менты, созданные в программе, практически всегда недоступными из других про и в качестве общего языка применялся формат ASCII Ч он позволял передавать содержимое документа, но за это при ходилось платить полной форматирования.

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

HTML и протокол передачи информации в формате HTML HTTP Transfer Protocol) предоставили дополнительные преимущества. очень легок, поэтому он обес печил эффективное использование весьма ограниченной в то время пропускной способности каналов связи. Мой компьютер теперь подключен к Web no быстрому кабельному модему, но до этого многие годы я просматривал Web-страницы, пользуясь модемом со скоростью 23,8 или 56 кбит/с. Но даже таких стей вполне хватало для получения HTML-документов. HTTP не только нетребователен к пропускной способности, но и несиль но нагружает сервер, который хранит и предоставляет HTML страницы клиентам по запросу.

Основные сведения о разработке в Задача: разработка динамических Web приложений Со временем стало понятно, что кроме простого страниц HTTP можно использовать для отображения динамичес кой информации. Обратите что я не считаю динами ческим информационным наполнением (dynamic content) аними значки и танцующих домашних которые встречаются на многих Web-страницах. Обычно подобная ани мация создается с применением JavaScript-сценариев, выполня емых браузером пользователя. Под динамическим наполнением я подразумеваю информацию, содержание которой определяет ся тем, она предназначена, и которая отличается от просмот ра к просмотру. Динамическое содержимое позволяет обеспечить обмен информацией. Используя формы на Web пользователь получает возможность запрашивать ин формацию различного Например, транспортный идентификатор партии товара, он может подробнее узнать, где она находится в данный момент. что обмен пользо вателя и сервера состоит не только из форм и информации;

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

Примечание Выполняемых на стороне клиента сценариев на JavaScript или на другом языке обыч но недостаточно для создания полноценных динами ческих Web-страниц. Хотя сценарии и чем простые картинки, и особенно полезны для проверки правильности заполнения форм клиентом без необходимости повторного об ращения к серверу, значительно упроща ет создание процедур проверки правильности вво димых данных. В главе 5 я расскажу о стандартных процедурах проверки, а в главе 6 как со здавать собственные в которых эф фективное и надежное приложение состоит из кода, расположенного на клиенте и на сервере.

4 Глава В середине 1990-х многим компаниям пришлось снижать сово купную стоимость владения (total cost of ownership, TCO). Вмес те с тем традиционный толстый клиент с противоречивыми динамически подключаемыми библиотеками (DLL) и параметра ми реестра стал составлять большую часть ТСО. Поэтому мно гие компании з способ быстро развер нуть на предприятии критически важные при мини мальном переконфигурировании клиентских машин. Например, когда я пишу эти строки, я использую несколько приложений, с применением почты, Ч пользовате лям просто предоставили URL-адреса и начальные инструкции по работе в системе. Регистрируя нового пользователя, ратор инициирует ответ по почте;

таким образом, сокращаются усилия по развертыванию прило жения.

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

Первое решение: CGI Gateway Ч одно из первых решений, созданных доставки Web-информа он до сих пор популярен в мире UNIX.

ния Ч это программы, исполняемые на Web-сервере и обычно используемые для предоставления динамической Web-информа ции. В листинге 1-1 показан пример простого консольного CGI приложения, которое отображает в браузере строку Hello CCI World.

// ftlnclude ftinclude char* Основные сведения о разработке в CGI CGI return 0;

Листинг 1-1. Простое Эта очень простая выводит и и HTML текст, которые отображаются з браузере, как показано на рис. Первая функция минимально необходимую заголовочную информацию. Первый заголовок информирует о версии HTTP и предоставляет код, указывающий на успех операции (200 ОК). Следующая строка сообщает тип ин формации Ч в данном случае это На основе таких дений браузер узнает, как интерпретировать данные. Например, если вместо указать браузер интер претирует информацию как документ в формате Microsoft Word или RTF, а не HTML. Перечень заголовков двумя па рами знаков возврат каретки/перевод строки, которые сигна лизируют о завершении заголовков. Далее следует обычная ин формация в формате HTML.

Hello CGI World.

Рис. 1-1. Отображение в окне браузера страницы, полученной в результате работы программы, показанной в листинге 1- Глава О консольных Хотя программу из листинга 1-1 можно скомпилировать как стандартное приложение MS-DOS, я лировал ее как полноценное 32-разрядное консольное при ложение. Как из в процессе исполнения это приложение напоминает старое, доброе MS-DOS-приложе ние текстового режима, но на самом деле это настоящее 32 разрядное приложение, способное практичес ки к любым загружать DLL-библиотеки и т. п. Сегодня есть и лучшие способы создания приложений на скорую руку, но некоторые (особенно утили ты строки) лучше работают как консольные. При ложения-службы (те, что работают, даже когда ни один пользователь не вошел в систему) Ч это консольные при ложения, которые в своей работе используют пару-тройку специальных API-функций.

В стандартных приложениях под стандартным уст ввода клавиатура, а под стандартным устройством вывода Ч экран.

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

Основные о разработке в Преимущества CGI способна выполнять практически все, что вы по Ч получать доступ к базам данных, считывать файлы, работать с системным реестром и все остальное, что обычно делает В листинге используется C/C+ +, но ничто не мешает восполь зоваться любым языком программирования или разработки и создать приложение, считывающее со стандартного устройства ввода и записывающее в стандартное устройство вывода. В мире UNIX для применяется а среди поклонников Win32 популярна среда Delphi Borland, которая явно поддерживает предоставляя классы, управляющие чтением записью в стан дартные устройства.

Если преподать программистам, имеющим опыт создания про грамм текстового режима, азы высока что они сразу смогут создавать почти приличные Такие программы просто тестировать, а цикл программирова ние Ч тестирование довольно прямолинеен. Доста точно настроить компилятор на сохранение исполняемого ла в нужном каталоге Ч и можно тестировать приложение, от крывая соответствующую страницу в браузере и при необходи мости к редактору, чтобы внести изменения.

Недостатки CGI Чтобы понять недостатки CGI, следует поближе познакомиться с тем, что происходит при исполнении CGI-программы. Напри мер, вызова приложения, показанного в листинге 1-1, мож но использовать следующий URL-agpec:

Возможен один из двух сценариев поведения сервера Microsoft Internet Information Services при этого URL-адреса: IIS либо предложит загрузить программу SayHelloCGI.exe с виртуаль ного каталога sayhellocgi на локальную машину, либо выполнит ее.

Естественно, нам нужно, чтобы программа выполнялась, для это го следует разрешение на исполнение в указанном виртуальном каталоге. (Подробнее о таких разреше ний рассказано в приложении А.) 8 Глава При наличии соответствующих разрешений после ввода адреса SayHetloCCI.exe исполняется с информацией, поступив шей через стандартное и отправляет инфор предназначенную стандартному устройству в браузер. Если G заголовках содержится ошибка если отсутствует вторая знаков возврат каретки/перевод стро ки, заголовочный блок), одни браузеры просто проигнорируют текст, другие отобразят окно с сообщением об ошибке и выведут текст на стандартное устройство вывода.

Выполнив свою задачу, завершает работу.

Модель CCI хороша тем, что после завершения работы грамму можно так же, как и любую другую программу, изменять или удалять;

однако эта является и недостатком CGI. При исполнении CGI-программа загружается, а по заверше нии работы полностью удаляется из памяти. Много ресурсов тра тится на создание и удаление процессов. Создание процесса Ч более ресурсоемкая операция по скажем, с простым считыванием HTML-файла. В конечном счете, подобное создание и удаление процессов сильно снижает производительность, а так же перегружает ресурсы. Когда 100 клиентов одновременно об ращаются к одной в памяти создается экзем пляров этой программы. Ресурсы Web-сервера активно пожи что сказывается на масштабируемости.

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

Второе решение:

Microsoft разработала для разработчиков новый способ создания масштабируемых приложений, который призван устранить при сущие CGI проблемы с производительностью и масштабируемо стью. Эта альтернатива называется (Internet Server Application Programming Ч API-ин терфейс Интернет-сервера). Вместо исполняемых файлов в ISAPI DLL-библиотеки, что позволяет повысить произво дительность и масштабируемость.

Основные сведения о разработке в В ISAP! два типа DLL-библиотек:

extensions) и filters). Первые ука зываются в URL-адресе, на например, так:

можно вызывать с параметрами, которые по зволят одному компоненту выполнять разные задачи. Так же как в случае с CGI, в каталоге следует предоставить разрешения на исполнение, в противном случае DLL загружается на а не исполняется на сервере. ISAPI-расширения обычно применяют ся для обработки клиентских запросов и возвращения ответа в формате HTML. Это очень похоже на схему работы грамм.

В CGI нет прямого аналога функциям, выполняемым трами. никогда не вызываются явно Ч обращается к ним в ответ на определенные события з процессе запроса:

Х на завершение обработки сервером клиен том заголовков;

Х на завершение сервером процедуры аутентификации клиента;

Х на сопоставление сервером логического URL-адреса физичес кому;

Х до начала пересылки сырых данных от клиента на сервер;

Х на завершение пересылки сырых данных от клиента, но до начала их обработки на сервере;

Х на регистрацию информации сервером в журнале;

Х на сеанса.

Как любой фильтр, должен запрашивать лишь нужные ему уведомления и обрабатывать их максимально быстро. Чаще всего применяются для поддерж ки особых процедур аутентификации. Другое применение Ч модификация HTML-текста перед отправкой клиенту, например для изменения цвета фона страниц. Поскольку ISAPI-фильтры не столь как я ограничусь только эти ми сведениями. Более подробную информацию об Глава рениях вы в моей книге Inside (Microsoft Press, 1999).

В определено несколько точек входа в функции, экспорти руемые из DLL. Эти точки входа IIS загружать DLL, вызывать реализованные в ней функции, передавая при необхо димости нужные и получать данные для отправки в браузер. ISAPI требует наличия реализации по ней мере двух точки входа Ч и часто создаются с использованием библиотеки MFC (Microsoft Foundation>

API ч the MFC Рис, 1-2. Первый этап ISAPI-расширения в Visual 6. Основные сведения о разработке в Одна из созданных мастером функций называется Что бы функции, (ли стинг я изменил созданную мастером реализацию 1-2).

// command handlers void pCtxt) } Листинг 1-2. Функция Default в простом Обратите внимание, что вся отображаемая в окне браузера инфор записывается явно. Реализация по умолчанию функции создает открывающие тэги и