Книги, научные публикации Pages:     | 1 |   ...   | 2 | 3 | 4 | 5 |

том 2 альманах програ иста Тематический сборник материалов Library и Magazine ASP.NET Web-сервис Web-приложения альманах программиста Составитель Ю. Е. ...

-- [ Страница 4 ] --

Простейший способ решения проблемы неизвестных обязательных заго ловков в заключается в применении пользовательского входного фильтра вроде показанного на рис. 8. Must Understand Input Filter проверя ет наличие в сообщении обязательных заголовков через XPath. Если тако вые имеются, фильтр генерирует ошибку. Предполагается, что к моменту запуска этого фильтра предыдущие фильтры уже обработали и удалили из сообщения все распознанные обязательные заголовки. (Замечу, что все создатели пользовательских входных фильтров для WSE должны учиты вать такой подход, иначе обработка неизвестных обязательных заголовков станет неоправданно сложной.) Если вы сконфигурируете этот фильтр так, как требует WSE, он будет выполняться после всех встроенных входных фильтров Вот код для настройки для такого фильтра:

/> Рис. 8. Пользовательский входной фильтр public>

С public override void <.

if к // дня см. след. стр.

заголовки в ASP.NET Рис. Пользовательский фильтр // Ищем в сообщении за головок node = [. *.

// Если найден, генерируем ошибку if null) string header;

throw fcttp:

Заключение Мощь протокола SOAP во многом обусловлена его расширяемостью. Эле мент Header играет важнейшую роль для дальнейшего развития Web-сер висов. Все новые протоколы защиты, транзакций и другой функциональ ности реализуются через заголовки. Однако за такую гибкость приходит ся платить. В системах со свободным (loosely coupled sys tems) следует ожидать отправки клиентом неизвестных элементов и быть готовым работать с такими элементами. В случае обязательных заголовков это сводится к их обнаружению и обработке до запуска кода Web-сервиса.

Хотя инфраструктура Web-сервисов ASP.NET не делает этого автомати чески, модель обработки заголовков позволяет вам достаточно легко ре шить такую задачу самостоятельно.

Исходный код для этой статьи можно скачать по ссылке rosoft.com/msdnmag/code03.aspx в разделе за май.

Тим Эвалд Ч руководитель программы по Web-сервисам XML в В настоящее время перерабатывает архитектуру под Web сервисы, а также пишет об этой технологии и рассказывает о ней на конфе ренциях. Автор книги Transactional Designing Scalable Applications 2001). С ним можно связаться по адресу tewald@microsoft.com.

Сринивасан Office XP Обмен информацией между документами Office и Web-сервисами* Office XP Web Services Toolkit приложения, которые собирают информацию и запускают транзакции через самые разнообразные Этот инструментальный набор также упрощает удаленный поиск Кроме того, в его состав входит Web Service Reference Tool Ч программа, обеспечивающая вызов Web-сервисов из приложений Office. В статье показывается, как с помощью кода, генерируемого Office XP Web Toolkit, обращаться к любым Web-сервисам. Автор подробно рассматривает процесс автоматической генерации кода и описывает собирающие схему, форматирующую запрос/ответ, а также сведения о реальных операциях Благодаря уникальным возможностям в структуризации и анализе данных Microsoft Office давно стал излюбленным инструментом кто работа ет с информацией, в том числе финансовых аналитиков и плановиков. Но решение какой-либо с помощью приложений Office требует, чтобы все необходимые данные находились в одном документе Office.

С появлением Office XP стало возможным создание собственных прило жений Ч концентраторов которые интегрируют данные, со бираемые как в рамках предприятия, так и в Интернете. Office XP позво ляет автоматизировать интеграцию информации, полученной в разных форматах, включая HTML и XML. За счет применения Office XP Web Services Toolkit объем кода, необходимого для интеграции возвращаемых Web-сервисами данных, сводится к минимуму.

Публиковалось в MSDN Magazine/Русская Редакция. 2002. № 6 (декабрь). Ч Прим. изд.

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

Что вошло в инструментальный набор?

Office XP Web Services Toolkit позволяет прямо из графического пользо вательского интерфейса (GUI) искать Web-сервисы в любом тре или указывать конкретный Web-сервис, введя URL к файлу с описа нием этого сервиса. Поддерживаемые форматы файла Ч WSDL (Web Services Description Language) и VSDisco (Visual Studio Discovery) (последний формат уже устарел). Если файл содержит описания несколь ких Web-сервисов, вы можете выбрать через GUI отдельные или все Web сервисы для использования в текущем документе. После этого одна из утилит генерирует код классов, которые обращаются к Web-сервисам че рез клиентский объект Microsoft SOAP. Эти классы включают методы, со ответствующие операциям Web-сервисов. И пользователь может писать простые сценарии на VBA (Visual Basic for Applications), ничего не зная о Web-сервисах.

В Office XP Web Services Toolkit (его можно скачать по ссылке 979/ также входят Microsoft SOAP Toolkit 3.0, MSXML 4. и утилита Web Services References Tool, предназначенная для поиска Web сервисов.

Бизнес-сценарий Как уже говорилось, Office XP Web Services Toolkit Ч отличное средство для решения проблем, связанных с управлением сетью поставщиков. Про иллюстрирую это утверждение на примере компании с распределенной сетью заводов и центров дистрибуции. Мне известно, какие товары произ водятся на заводах и какие товары требуются каждому центру дистрибу ции. Я могу узнать расценки на услуги доставки продукции между любым заводом и центром дистрибуции, предлагаемые различными компаниями через их Web-сервисы, В данном случае я всегда выбираю компанию, лагающую наименьшие расценки. Теперь мне нужно определить, сколько товаров поставлять с каждого завода в каждый центр дистрибуции, чтобы предельно снизить общую стоимость доставки. На рис. 1 показана элект ронная таблица Excel, используемая для решения этой задачи.

Желтые ячейки в нижней части таблицы Ч это стоимость транспортиров ки. Я пришел к таким цифрам, получив с помощью Web-сервисов предло жения от разных компаний и выбрав самые низкие расценки. В верхней части таблицы показывается количество которое следует доставить с каждого завода в каждый центр дистрибуции, когда я решу проблему транспорта. Соответствующие значения вычислит надстройка Excel Solver (Поиск поставляемая с Excel.

! costs of shipping goods DCs not exceeding from plant and meeting demand Х ship frorr;

to у (at San Francisco _ Ч Ч _ Х by 180 200 Shipping DC у Greenville 310 1 Memphis 260 e * э $93 $15 $13 $ $ Рис. 1. Электронная таблица Excel для программы управления транспортировкой Для начала я вкратце рассмотрю несложный который предо ставляет данные о расценках на доставку, используя в качестве входных и выходных параметров простые типы данных, и с прило жениями по протоколу SOAP с применением RPC. Затем я свяжусь с этим Web-сервисом, найдя его через с помощью утилиты Web Services References Tool из состава Office XP Web Services Toolkit, Ч все это будет сделано, не выходя из электронной таблицы. Далее я расскажу о Web-сер висе, который использует в качестве входных и выходных параметров XML-документы, соответствующие стандартной схеме, и остановлюсь на том, как Office XP Web Services Toolkit обрабатывает такие Web-сервисы со сложными параметрами.

Web-сервис Я использую Web-сервис ASP.NET, но утилита Web Services References Tool не требует именно этой платформы Ч главное, чтобы у Web-сервиса Обмен информацией между документами Office и был корректный файл описания в формате или VSDisco. Ниже приведен код ASMX-файла для Web-сервиса, предоставляющего сведения о стоимости доставки:

WebService Imports System Imports _ Public ShippingRateQuote : _ Inherits WebService Public Function _ GetRate{city1 as city as String) as Integer Код, предоставляющий сведения о стоимости // доставки, опущен End Function End>

Как только вы разместите ASMX-файл на Web-сервере, потенциальные пользователи смогут получать сервиса, добавляя к ASMX-файла выражение В конечном WSDL-файле имя моего сервиса будет совпадать с именем моего класса (ShippingRateQuote), ко торый будет сообщать о стоимости доставки.

Регистрация в UDDI Оптимальный способ регистрации Web-сервиса с описа ния (WSDL-дескриптором) в UDDI изложен в документе В данном случае я зарегистрирую сервис ShippingRateQuote как предназначенный для рынка транспортных услуг под названием Ship Другие транспортные компании тоже могут регистрировать свои Web-сервисы для этого рынка. Подробно рассказы вать о регистрации Web-сервиса в UDDI я не буду, но если вкратце, то на основе WSDL-файла своего Web-сервиса я создаю на тестовом Microsoft затем создаю пред приятие Ship Yonder, регистрирую ShippingRateQuote как сервис, предос можно примерно как туда-сюда. Ч Прим.

этим предприятием, и, наконец, связываю tModel с данным сервисом.

Разработка Начну с таблицы, аналогичной приведенной на рис. 1. Если вы скачали код к моей статье в раз деле за декабрь), используйте файл inventory assignment pre ws.xls. На жмите чтобы перейти в редактор Visual Basic, и выберите Tools Web Service References Ч откроется окно, показанное на рис. 2.

Рис. 2. Окно Web Service References В левой части окна вводятся параметры поиска, в том числе к или Web-сервису. По умолчанию Web Services References Tool ищет сервисы в рабочем Microsoft на soft.com. Чтобы указать другой (в данном случае Ч тестовый сервер кнопку More/Less и введите в поле Server (рис. 2) адрес нужного сервера. Допустимые адреса таковы: тесто вый реестр ваш личный реестр или любой общедоступный UDDI-реестр. Web-сервисы можно искать по названию предприятия (я так и делаю) или по ключевым словам. По умолчанию Web-сервис возвра щается в списке результатов, даже если записи соответству Обмен между документами и Web-сервисами ет лишь часть слов Ч критериев поиска;

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

В отличие от поиска на Microsoft или через Web-интерфейс любого другого общедоступного утилита Web Services References Tool дает гораздо меньше результатов, так как отбирает только сервисы, которые предоставляют хотя бы один сервис с WSDL-описа (рис. 3). Например, если при поиске на Web-странице Microsoft я укажу критерий то получу список со множеством организаций, в названии которых присутствует leadership и scholarship. Попробуйте указать тот же критерий в Web Services References Tool и вы почувствуете разницу!

Рис. 3. Результаты поиска по критерию В результате поиска я получаю два сервиса Ship Yonder;

ShippingRate и Обсудим первый из них. Чтобы просмотреть его список методов, щелкните знак плюс слева от имени сервиса (рис. 3).

Теперь снова выберите первый сервис и щелкните кнопку Add.

Это приведет к созданию и добавлению в VBA-проект нового модуля клас са, а также к включению ссылок на Microsoft SOAP Type Library и MSX ML 3.0. Имя класса формируется из имени сервиса, указанного в файле, и префикса (рис. 4).

Три закрытые переменные класса содержат значения, задающие имена сер виса и порта, а также пространство имен. Две первых строки реального кода объявляют две закрытые переменные класса: одну Ч для ента и одну Ч для SOAP-клиент создается и инициа лизируется методом Initialize класса, а в методе Terminate он устанавлива ется в Nothing. В методе Initialize есть локальная переменная str_WSML, связывающая сложные параметры Web-сервиса с Посколь ку в данном случае сложных параметров нет, ее значение Ч пустая строка.

Рис. 4. Новый модуль класса Этот 2.0.

Описание;

U8L Комментарии ' Задаем Private As Const As = Private As Const As Private Const As String = _ Sub ' Эта процедура при создании ' как новый * и ' на no As "" Set в сетевых ' Internet настроен параметры прокси-сервера автоматически С л след. стр.

Обмен информацией между документами Office и Рис. 4. Новый модуль End Sub Private ' Эта каждой ' в ' Перехват ошибок On = Nothing Exit rap:

End Sub Sub Аз * If о Err.

* Это If End Sub String, As, на ' GoTo Exit End 284 Web-сервисы Для каждой операции сервиса определен отдельный метод. Методам зада ются имена, состоящие из имени операции и префикса У меня один метод, wsm_GetRate, соответствующий операции GetRate сервиса.

Именно этот метод и делает реальную работу. Он выполняет Web-сервиса и возвращает полученное от Web-метода значение типа integer, что позволяет написать простой для доступа к этому методу.

Вы можете создать пользовательскую функцию, и вызы вать ее наряду со встроенными функциями Excel типа Sum, Average и др.

Добавьте в свой проект модуль и вставьте в него определения переменной и открытой функции:

' класса, генерируемого Web Services Toolkit Dim As New ' Пользовательская функция, через метод класса Public Function As String, _ toCity As String) As Long GetShippingRate = toCity) End Function Теперь, если вы используете таблицу, аналогичную приведенной на рис. 1, введите в ячейку С16 формулу в ином случае измените адреса ячеек. Затем скопируйте формулу в другие ячейки.

Web-сервисы, использующие документы Рассмотрим сервис Он аналогичен ShippingRate Quote с тем исключением, что принимает запросы и предоставляет данные о стоимости транспортировки в виде ментов.

Сначала я вкратце опишу (XML Schema Definition), определя ющий форматы документа-запроса и документа-ответа, и реализацию Web-сервиса на основе ASP.NET. После этого мы об судим код, генерируемый Office XP Web Services Toolkit для доступа к данному сервису из Excel. На этот раз сгенерированный код будет объем нее, но и интереснее!

На рис. 5 показана простая схема для документов запроса и ответа о рас ценках на транспортировку. (Документ, соответствующий реальным стан дартам, может быть гораздо сложнее.) Рис, 5. Схема документов запроса и ответа см. след. стр.

Обмен информацией между документами Рис. 5. Схема документов запроса и ответа fflinOceurs-"1" s fiillable "true" fflinOccurs="T /> " /> Web-сервис использующий документы На рис. 6 приведен код ASMX-файла Web-сервиса который использует в качестве параметров XML-документы, соответству ющие схеме на рис. 4. Первое отличие от ASMX-файла ванного Web-сервиса Ч добавление пространства имен lization. Сразу бросается в что теперь у Web-метода сы. Эти параметры являются экземплярами двух классов, показанных в конце ASMX-файла. В данном случае я сам написал эти классы в соответ ствии с однако утилита wsdl.exe из состава SDK позво ляет автоматически генерировать такие классы. Если стандарт указан не в а с (XML Data Reduced) или про сто при помощи документа экземпляра XML, преобразуйте его в XSD файл, запустив утилиту XSD.exe из SDK.

Рис. 6. Новый Web-сервис Imports см. след. стр.

Рис. 6. Новый Web-сервис>

As New Select Case "San ' Для последующие операторы Select End>

' ">

Создание для нового сервиса Как и прежде, вам следует найти с помощью Web Services Reference Tool сервис в и, выбрав данный сервис, сгенериро вать код. На этот раз инструментальный набор генерирует три класса (в прошлый раз был только один класс). В моем Web-сервисе класс XML-документу Вот два члена имена которых соответствуют именам элементов в XML-до кументе:

Public As Public As String Но ведь в моем Web-сервисе есть два XML-типа: QuoteRequest и Quote!

Почему же не сгенерирован класс, соответствующий Quote? Определение типа Quote в Web-сервисе содержит только один элемент, iRate, с типом Обмен информацией между ментам и и данных integer (рис. 5). VBA-код, сгенерированный Office XP Web Services Toolkit, сопоставляет этот элемент типа integer с массивом типа long. При наличии хотя бы второго элемента я получил бы класс, соответствующий типу Quote, Ч как и в случае с типом QuoteRequest. Хотите сами убедить ся в этом Ч введите в определение класса Quote в своем еще один элемент.

Второй класс, генерируемый инструментальным набором, Ч Ч используется мэппером базовых типов (generic type mapper) из состава SOAP Toolkit 3.0. Полное описание мэпперов базовых и других типов вы найдете в документации SOAP Toolkit 3.0. В данном слу чае глубокое понимание принципов работы таких мэпперов не требуется, Последний класс Ч (рис. 7) Ч это прокси для моего Web-сервиса ShippingRateQuote2 и аналогичен классу pingRateQuote. Закрытые члены класса, объявленные в начале исходного кода, совпадают с соответствующими элементами из предыдущего приме ра. В методе Initialize переменная не пустой строкой.

Она содержит информацию, используемую SOAP для сериализации и де сериализации информации QuoteRequest, и указывает на мэппер типа и на struct_QuoteRequest как на класс, которому следует сопоставить тип QuoteRequest. Кроме того, в пос ледней строке кода создается экземпляр класса clsof_Factory_Shipping RateQ, присваиваемый клиентскому свойству GCTMObjectFactory клиен тского объекта SOAP.

Рис. 7. Web-сервис ShippingRateQuote ' Комментарии удалены ' класса Private As Private * As Private As * Private As * _ Private Sub Эта при каждом создании Она как новый а на основе см. след. стр.

Web-сервисы Рис. 7. Web-сервис по Dim As String & = & & & = = & = & Set New ' в настройках ' Explorer, в _ " на автодетекцию ' равно True), параметры Set New Иnd Sub private ' On Error Set = Exit End Sub см. след. стр.

Обмен информацией между Office и Web-сервисами Рис. 7. Web-сервис Private _ As String) ' If о Then ring " Это не End If Public Function ' на ' * - типа Long.

* реализации в разделе Complex Types:

* Service References Tool 2.0, ' ошибок Exit End Самая важная часть сгенерированного кода Ч функция по скольку именно ее я буду вызывать в своих VBA-сценариях. Она прини мает объект типа и возвращает типа long как переменную типа variant. При вызове клиентского объекта SOAP функция использует те же входные и значения. За се и данных для Web-сервиса отвечает базовых типов из SOAP Toolkit 3.0.

Программа управления транспортировкой Вернемся к пользовательской функции Get Shipping Rate в VBA-проекте Excel и изменим ее так, чтобы она получала данные о стоимости доставки 10- от обоих сервисов и возвращала наименьшее значение. Новый код функ ции показан на рис. 8.

Рис. 8. Новый код функции ' Экземпляры двух классов, Toolkit Dim As New New ' Web-сервисы ' и через класса, ' Web ' Она на доставку, сообщаемые ' наименьшее из цен.

Public As As ' Web-сервис с типа Web-сервис со As * ' Входной - объект типа ' If Else If Function Преимущество в использовании с этой целью Excel или любого другого приложения Office в том, что нет нужды заботиться о сохранении данных.

Выяснив самые низкие цены, вы можете вести дальнейший анализ данных, даже если отключитесь от Поскольку проблема транспортировки Ч один из примеров, предлагаемых для Excel Solver, я не стану вдаваться в детали разработки модели. Одна ко в который можно скачать с сайта MSDN Magazine, имеют ся и сама и исчерпывающие комментарии по ней, взятые из исход ного примера для Excel Solver. Готовое решение иллюстрирует рис. 9.

В ячейках отображается количество товаров, которое надо доста вить с каждого завода в каждый центр дистрибуции, а в ячейке В20 Ч Обмен между документами Office и Web-сервисами минимальная цена доставки. Благодаря Office XP Web Services Toolkit я без особых усилий смог задействовать уникальные возможности Excel и Web-сервисов.

of from to not and demand each Number to fromptontx to/vojona/DC 300 0 0 160 D I Memphis 260 0 40 Х 280 180 80 20 0 ХХ Demands by Х 1 costs from to 10 8 б i- 5 $320 $1.100 $900 $1, Рис. 9. Итоговая электронная таблица Excel Заключение Хотя в своем примере я использовал только Excel, Office XP Web Services Toolkit можно применять в любых других приложениях Office. Более того, с Office XP Web Services Toolkit поставляется несколько интересных при меров для всех приложений.

Office XP Web Services Toolkit Ч во многих отношениях замечательная разработка, которая открывает доступ к Web-сервисам из вездесущих при ложений Office, требуя при этом минимум кода. Важно и то, что пользо ватели могут работать с Web-сервисами из привычных приложений Office.

Кришнамурти Srinivasan) Ч руководитель группы Web Services Technologies в Intel Labs. Эта группа представляет компанию Intel в ключевых комитетах, занимающихся стандартизацией Web сервисов. Взяв годичный отпуск для научной работы, читал лекции на выпускных курсах в Индийском институте информационных технологий в Бангалоре.

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

Ответ Вы выбрали Web-сервисы, но тем, кого интересует дополнитель ная информация по выбору между Microsoft Remoting и Web-серви сами, советую ознакомиться со статьей Тима (Tim в MSDN А те перь отвечу на ваш вопрос.

Вы могли бы решить свою задачу, создав два Web-сервиса: первый созда ется с помощью отражения (reflection) и соответствует интерфейсу объек та, второй вызывает этот интерфейс. У меня на это ушло часа четыре, но в конце концов получилось.

За основу я взял код приложения, написанного для октябрьского номера за 2002 г. и работающего с пользовательскими атрибутами ( Рассмот рим этот код.

Публиковалось в Редакция. 2003. N 1 (январь). Прим. изд.

создание Его интерфейс Ч простая форма. для панели инструментов выглядит так:

Select Button) Case 0 :

Case 1 :

Case Else End Select Приведенный на рис. 1 высокоуровневый метод вы полняет всю работу. Он вызывает функции, генерирующие код, и сохраня ет их вывод в новых файлах. Остальная часть кода формы довольно про ста и здесь не приводится (полный исходный код можно скачать по ссыл ке в разделе за январь).

Рис. 1. GenerateWebService Sub t Type As Dim As [Assembly] If * Then If Try * * Each t In arrayOfTypes t Is Nothing was not exit Sub If & ' Записать & ' Записать Файл кода & Catch As * S S см. след. стр.

Web-сервисы Рис. 1.

"error & Finally = Nothing End End Sub Для загрузки выбранной сборки GenerateWebService вызывает метод затем перебирает обнаруженные классы. Для каждого класса вызываются методы и которые и генерируют код, сохраняемый в и Кроме того, к тек стовому полю добавляется имя класса. Функция WriteFile записывает как так и Теперь рассмотрим модуль Ч он содержит код, генерирую щий функции (рис. 2). В программах нет ничего особенного, но они требуют терпения. Дело в что нужно учитывать каждый символ и каждый пробел. Кроме того, нельзя забывать о концах строк, табуляторах и прочих средствах форматирования, облегчающих восприятие кода. Не обходимо также встроить обработку ошибок и прочие вспомогательные функции.

Рис. 2, Модуль GenRoutines As String Public As As If Name я Ч fine If = " " ftxtetieflind*'""" & Name & & & Return End Public t As As AS см. след. стр.

Автоматизированное создание Рис. 2.

As As As Boolean As As Dim As Dim As String Dim As String Bin As String Dim i & vbCrtf & & fi & 4 & t.

i * i - 1) & i & & _ 8 "<)" & 4* Sub & Sub" A vbCrlf 4= ' If * False 4 vbCrLf Function & & "Dim as & & см. след. стр.

Рис. 2. Модуль GenRoutines vbTab & "try" & vbTab 5 = " & _ 4 & &= * In If Then vbCrif & & & & " as " If If о 4 as & Д & & 4= vbTab as Exception" 4= vbTab 4 vbTab & _ New in $ 4* vbTab & Try" 4 _ & 4= vbTab 4 " & 4 vbCrtf 4 vbCrtf "End & End If Next см. след. стр.

создание Рис. 2. Модуль & to*>

Case "Equals" : False Case : Return False Case Else True End Select End Взгляните на код, генерирующий Web-сервис. В первой строке модуля создается константа для Web-сервиса. Это позволяет легко подстра ивать URI под стандарты, принятые в вашей организации.

Функция выводит заголовок Web-сервиса. Переданное ей имя класса становится именем Web-сервиса. Ее код несложен Ч это просто-напросто функция, строки.

Теперь рассмотрим создание кода Web-сервиса (рис. 2). Именно тут вы настоящая работа. Сначала объявляются переменные, в том числе используемые в основном для обработки строк, но иногда хранящие информацию о методе. Например, для получения параметров метода или типа возвращаемого значения в цикле For Next ссылает ся на текущий метод. Точно так же в oCN хранится информация о конст рукторе.

Первые несколько строк начинают выводить код. Как видите, вы просто формируете операторы исходного кода и добавляете получаемые строки к переменной = "Imports & vbCrLf localOutput & & """)> _" & vbCrLf Для создания кода, генерирующего переменные и ссылки, можно устано собственные стандарты кодирования. Так, следующая строка создает Web-сервисы впоследствии используемую в Web-сервисе переменную, имя которой со ответствует ссылке на объект:

= "о" & Далее задается имя сборки и извлекается подстрока слева до первой точки:

= i = = i - 1) Это необходимо из-за того, что метод возвращает в разделенной точками строке больше информации, чем мне нужно. Для формирования корректного имени просто извлекается часть строки слева до первой точки:

vbTab & "Private & localObjectName 4 " as New & _ localAssemblyName 4 & Мой код создает только конструктор по умолчанию без каких-либо пара метров. Если вам нужно добавить к нему дополнительный сделайте это сами.

Первый цикл For Each на каждой итерации создает параметры для каждо го метода. Кроме того, код помечает имя метода атрибутом Чтобы следует ли выводить этот метод, вызывается функция CheckName. Например, выводить (метод класса по умолчанию) обычно не требуется. Взгляните, как переменная используется для получения имени метода, его параметров и возвращаемого типа.

мер, для вывода имени метода я применяю такой код:

localOutput ft localOutput "Public Function & & Код, генерируемый этим фрагментом, содержит переменную localReturn, в которой Web-методы хранят значения, возвращаемые вызываемыми ими методами.

Внутренний цикл For Each (снова рис. 2) обрабатывает параметры. Он довольно хитрый, так как ему нужно учитывать все параметры, их типы и корректный синтаксис при наличии нескольких параметров.

Наконец, следующий код определяет тип возвращаемого методом пара метра и добавляет его к генерируемой строке:

Web-сервиса 4= "} as & & vbCrLf Далее создается обработчик ошибок Web-метода:

&= vbTab & "Catch Exc as Exception" & vbCrLf &= vbTab & vbTab & "Throw New & vbCrLf vbTab & & vbCrLf & vbCrLf Последние строки кода во внешнем цикле Each завершают Web-метод, добавляя код, передающий возвращаемое значение, и оператор End>

В текущей версии этой утилиты нужно изменить ссылку в так, чтобы она указывала на пространство имен вашего проекта. Напри мер, созданный утилитой атрибут>

Утилита готова, но давайте поразмышляем о процессе в целом. После того как код стал выглядеть прилично, я поместил его в проект Web-сервиса и проверил на ошибки. Исправив их, я вновь сгенерировал Web-сервис. За тем стал тестировать, исправлять ошибки и снова тестировать. Когда Web сервис больше не давал ошибок в Visual Studio я запустил его в тес товом режиме и проверил каждый метод. Благодаря этому я убедился, что все работает.

Есть еще один способ генерации кода Ч применение класса из Framework. Этот альтернативный подход я продемонстри рую в следующий раз. Кроме того, я включил простой пример использо вания CodeDom (CodeDomSample.vb) в файлы, которые можно скачать для этой статьи. Уже закончив я выловил и устранил в коде не сколько ошибок.

Кен Спенсер (Ken Spencer) работает в компании 32Х Tech ( которая занимается разработкой ПО и обучением, а также предоставляет консалтинговые услуги по технологиям Microsoft.

Пол ASP.NET Быстрое освоение приемов разработки Web-сайта с помощью ASP.NET Starter Kits* При создании Web-сайта по технологии ASP.NET вам, помог бы крепкий кода, на котором можно построить свой сайт. Разве не здорово начать с полноценного сайта, поправить немного тут и там и выпустить его свет? ASP.NET Starter Kits Ч пакет решений, который как для этого и предназначен. Пять наборов Ч Reports, Commerce, Portal и Time Tracker Ч содержат полный, повторно используемый код, легко адаптируемый под ваши потребности. Кроме некоторые Интернет провайдеры (ISP) поддерживают автоматическое развертывание Web-сайтов, построенных на основе этих так что вам и делать-то особенно нечего. В этой статье автор рассказывает о ASP.NET Starter Kits и создает сообщества с такой как поддержка опросов квот закачки, уведомле ний об изменениях и тем ASP.NET и Visual Studio безусловно облегчили разработку Web-при ложений. Однако создание Web-сайтов ASP.NET все еще требует опреде ленных усилий с вашей стороны. Вам по-прежнему нужно проектировать весьма солидное приложение, разрабатывать для него надежный, повтор но используемый код и проводить его тщательное тестирование. Вполне вероятно, что посреди этого процесса вы зададитесь вопросом: Неужели до меня никто не сталкивался с этой проблемой? А вдруг я снова изобре таю С некоторыми сценариями сталкиваются большинство Публиковалось в MSDN Редакция. 2003. № 8 (август). - Прим. изд.

Быстрое приемов разработки К таким сценариям относится создание сайта учет времени (tracking time) по проекту или создание порта ла для своей компании. Было бы неплохо опереться на хорошо продуман ный фундамент, а не начинать все нуля Ч пусть даже все равно пона добится настройка и расширение готового решения. Именно эта идея и реализована в ASP.NET Starter Kits.

ASP.NET Starter Kits Ч это набор из пяти полностью рабочих приложе ний-примеров от Microsoft. Вы можете скачать их по ссылке В набор входят приложение Ч витрина магазина электронной Web-сайт портал, примеры отчетов и приложение для учета времени по проекту. Цель этих приложений предложить разработчику несколько полезных стартовых Web-сайтов и образцы хорошего ASP.NET-кода, пригодного для обучения и в качестве отправной точки. Все пять наборов поставляются с полным исходным ко дом, работают с хранилищами данных SQL Server или Microsoft Data Engine (MSDE) и существуют в версиях на Visual Basic, C# и J#. Кроме того, есть версии, рассчитанные на Visual Studio [с ASPX-страница ми и страницами отделенного кода и SDK-версии (без страниц отделенного кода). Таким образом, вы можете работать с набора ми в своей любимой среде Ч будь то Visual Studio ASP.NET Web Matrix или любой другой редактор. В этой статье я сначала расскажу о пяти наборах ASP.NET Starter Kits, а затем сосредоточусь в основном на Community Starter Kit и покажу, как расширить его под конкретные по требности.

Наборы Commerce и Portal Commerce Starter Kit создает приложение Ч витрину электронного мага зина для вымышленной компании, продающей шпионское IBuySpy. Приложение основано на трехуровневой архитектуре, в нем реа лизованы кэширование, аутентификация на основе форм и корзина поку пателя. Кроме того, в набор входит компонент Web-сервиса В2В (Business to-Business). Это отличное приложение для обучения, особенно если вам нужно создать свое приложение электронной коммерции.

Portal Starter Kit создает приложение-портал для IBuySpy Ч для той же вымышленной компании, что и в Commerce Starter Kit. Набор содержит модулей: announcements, contacts, discussion, events, html/text, image, links, quicklinks, и пользовательский модуль.

Набор Time Tracker Time Tracker Starter Kit (рис. 1) Ч это для учета времени и биллинга без биллингового компонента. Оно сравнительно про стое и содержит три вкладки: Log, Reports и Administration. Вкладка Administration предназначена для конфигурирования проектов, Log Ч для учета времени, a Reports Ч для генерации отчетов по проекту или отдель ному сотруднику.

ДI A к i I 1.00 > С r :

> j Рис. 1. Log в Time Tracker Starter Kit Time Tracker Starter Kit демонстрирует несколько интересных архитектур ных особенностей ASP.NET, в том числе трехуровневую архитектуру, аутентификацию на основе форм и средствами Windows, динамическое создание диаграмм с помощью и мобильный клиентский интерфейс.

Набор Reports Reports Starter Kit отличается от остальных тем, что это не единое прило жение, а серия из восьми отчетов, которые можно запустить с тестовыми данными. Вам доступна документация и исходный код этих отчетов. Нич то не мешает вам скопировать их код и вставить его в собственное прило жение. Этот набор аналогичен ASP.NET поставляемому с Microsoft Framework SDK и Visual Studio Примеры включают простые табличные два варианта иерархических отчетов, кросс вкладки (cross tabs) и несколько диаграмм на основе GDI+.

Быстрое приемов разработки Набор Community Community Starter Kit Ч гвоздь программы. Не прилагая особых усилий и ничего не зная о как он работает, вы можете с его помощью быстро создать Web-сайт для группы пользователей, клуба, семьи или сообщества.

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

Community Starter Kit поддерживает разнообразные типы контента, в том числе фотогалереи и списки мероприятий (event listings). Он так же поддерживает некоторые дополнительные функции, обычно присут ствующие на многих сайтах сообществ, в том числе рекламу, модерирование, квоты закачки (upload), рейтинги, комментарии, опросы, уведомления об изменении контента, автоматическое цензурирование, тематические разде лы (topics), Web-окна (Web boxes), новости (newsletters), скины и защиту.

Реклама обрабатывается парой элементов управления AdRotator: один соответствует баннеру стандартного размера пикселов, а второй 125 пикселов. При включенном модерировании раздела контент дол жен быть одобрен модератором до публикации на сайте. Вы можете на строить квоты закачки для каждого пользователя, ограничив объем загру жаемых на сайт изображений и файлов. Кроме того, Community Starter Kit поддерживает квоту закачки для всего сообщества, что позволяет Интер нет-провайдеру обеспечивать хостинг нескольких сообществ в одном бок се (single box) без опасений, что одно из них займет все доступное диско вое пространство.

Вы можете разрешить поддержку рейтингов и комментариев для опреде ленного типа контента, например для книг или статей. Пользователи мо гут оценивать элемент контента по шкале от 1 до 5 и при желании писать свои комментарии (дополнительно или вместо рейтинга).

Community Starter Kit поддерживает создание опросов и вывод их резуль татов. То есть вы можете опросить пользователей, например, по таким воп росам: Какой разработки вы или Как звали первого барабанщика группы Led возможность автоматического уведомления пользователей о появлении новых матери алов в разделе. Поддерживается даже так что грубые вы ражения автоматически удаляются из контента без каких-либо действий с вашей стороны.

Набор Community позволяет создать список тематических разделов, что заставляет пользователей классифицировать свои материалы. Например, 306 Web-приложения новостной сайт по Framework может содержать такие разделы, как управляемый C++, Web-сервисы и т. д.

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

В наборе предусмотрены два механизма репликации контента: сервисная подписка (service и окна Web-сервисов (Web Service boxes).

Сервисная подписка позволяет брать контент из раздела другого сайта, построенного на основе Starter Kit, и показывать его на своем сайте. Например, вы можете подписаться на раздел обсуждений на другом сайте сообщества и выводить его на своем так, будто эта ваш раздел. Как и Web-окна, окна Web-сервисов выводят выдержки из текстов на полях страницы, но в отличие от первых последние могут получать контент с других сайтов. Вы можете подписаться на получение материалов с друго го сайта на основе Community Starter Kit, публикующего контент в виде Web-сервиса или на RSS-сервис вроде Любой раздел стороннего сайта можно сделать доступным с помощью Web-сервисов и протокола SOAP (протокол RSS в этом случае пока не поддерживается). К таким разделам можно об ращаться, используя сервисную подписку или окна Web-сервисов.

Есть также возможность рассылки новостей членам сообщества. Соответ ствующий компонент поддерживает и встраивание специальных тэгов для включения полей вроде FullName и Password и специ фичных для контента полей типа NewBooks и Ядро Community Starter Kit поддерживает концепцию скинов, или тем (themes), что позволяет радикально менять внешний вид сайта, просто выбирая другую тему со страницы администрирования. Скины и темы мы рассмотрим детальнее чуть позже.

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

Рис. 2 иллюстрирует ряд функций, поддерживаемых Community Starter Kit. Здесь в вымышленном сообществе Ballard используется тема Быстрое приемов разработки Professional. Обратите внимание на опрос в верхней части страницы и на окно, озаглавленное Tips & справа внизу на странице. Это окно Web-сервиса.

Х Welcome the User Group Tips and of Рис. 2. Пример Web-сайта сообщества Создание сообщества После того как вы скачаете и установите Community Starter Kit, первое, что вы захотите сделать, Ч удалить данные образца сайта. Для этого щел кните ссылку Login внизу панели навигации (navigation и зарегист рируйтесь как Admin с паролем Admin. (Смените пароль как можно быст рее, иначе возникнет угроза безопасности.) После успешного входа в сис тему на панели навигации появится новая ссылка (Admin). Щелкнув эту ссылку, вы попадете в раздел администрирования сайта. Прокрутите стра ницу вниз до ссылки Content.

Вернувшись на основную страницу сообщества после удаления контента, вы увидите, что часть контента все же сохранилась. Чтобы заменить кон тент на свой, вернитесь на страницу администрирования, щелкните Edit Web-приложения Sections, выберите раздел Home и задайте название сайта, описание и ло готип. Edit Sections позволяет базовую разметку основной стра ницы, выбрать тему и включить дополнительные функции (например, вывод Web-окон или окон Web-сервисов) для основной страницы.

После разметки основной страницы добавьте разделы к сайту. Число раз сайта не ограничено. Типы разделов (или модулей), которые можно создать, перечислены в табл. 1.

Табл. 1. Модули Community Starter Kit Тип раздела Описание Articles Список статей, новости, списки FAQ (часто советы Books Информация о книгах. Поддерживаются фотографии обложек книг и множество полей, в том числе автор, индекс ISBN, издатель и цена Custom Modules Контент элемента управления Discuss Форум. Поддерживаются отмеченные сообщения (pinned posts), (locked posts) и щения Downloads Файлы, доступные для скачивания Events Информация о интересных для данного сообщества. Можно указать дату публикации о мероприятии (visibility date), и тогда информация об этом мероприятии до поры до времени будет скрыта HTML Page Содержимое HTML-страницы, например страницы Contact Us Links Гиперссылки Parent Section Контейнер для других разделов. Страница по умолчанию Ч тоже родительский раздел, но вы можете добавить и другие родительские разделы Photo Галерея изображений. Поддерживается автоматическая микрокартинок (thumbnails) Для добавления раздела щелкните ссылку Edit Sections на странице адми нистрирования. Вы можете несколько разделов одного типа. Так, на рис. 2 показано два раздела одного типа типа: News и Article. Для орга низации группы сходных разделов пользуйтесь родительскими разделами.

Например, если вы хотите распределить файлы для скачивания по катего риям, создайте родительский раздел с несколькими разделами Downloads, скажем, Contributions, Controls и Speaker Presentations.

На странице Edit Sections можно включать дополнительные функции, влияющие на отдельные например поддержку модерирования Быстрое освоение приемов разработки Web-сайта или уведомлений по электронной почте. Также можно публиковать кон тент раздела в виде Web-сервиса сообщества.

Архитектура Community Starter Kit Хотя многие Web-сайты генерируются динамически в зависимости от те кущих данных, большинство по-прежнему в основном статичны. Это не всегда плохо, но чем больше контента генерируется динамически, тем больше возможностей в настройке сайта. Community Starter Kit полнос тью управляется данными. Не считая страниц, предназначенных для адми нистрирования, он включает всего одну ASPX-страницу, на которой нет никакого контента. Весь контент хранится в базе данных SQL Server или Одна установленная копия Community Starter Kit способна под держивать несколько сообществ;

такая поддержка настраивается под спе циальной учетной записью Когда Web-сервер получает запрос на страницу, относящуюся к Communi ty, этот запрос обрабатывается HTTP-модулем он определяет сообщество, раздел, страницу и пользователя, связанного с зап росом. Полученными данными он заполняет объекты и соответственно.

Эти объекты являются элементами набора Items объекта Context. Так как он сохраняется на время обработки запроса и к нему могут обращаться все модули и обработчики, участвующие в этом процессе, его данные доступ ны странице, обслуживающей запрос (подробнее об объекте Context см.

статью Стивена Смита Девять способов сохранения состояний в в номере за апрель 2003 г. по ссылке Затем CommunitiesModule перенаправляет запрос странице Default.aspx, которая динамически формирует ответ с применением упомянутых объектов, пользовательских элементов управле ния, вспомогательных классов и таблиц стилей.

Сейчас Community Starter Kit, наверное, не поддерживает все нужные вам функции, но он спроектирован с учетом расширяемости. Если вам что-то не нравится в его работе, вы легко это измените. Этот набор поставляется с полным исходным кодом на Visual Basic C# и J#. Особенно хоро шо адаптируются его темы и элементы модулей.

Работа с темами Инфраструктура Community Starter Kit основана на ASP.NET-приложе нии Forums;

как и Forums, она использует темы (также называемые ски нами) и за счет этого отделяет от основного кода. Тема Ч нечто боль шее, чем просто таблица стилей. По сути без тем никакого контента не Web-приложения было бы, так как они содержат все элементы управления, выводимые на страницах сайта. Тема состоит из элементов, приведенных в табл. 2.

Табл. 2. Элементы темы Элемент файлов Описание PageSkins Определяет разметку основной страницы. Для изменения базовой разметки основной страницы, в том числе количе ства столбцов и расположения пользовательских элементов управления, измените этот скин Разметка конкретных страниц, ContentSkins в том числе страниц статей, разделов статей, добавления статей, файлов для скачивания и разделов с файлами для скачива ния ControlSkins Разметка элементов управления, применяемых на страницах, например окна Web-сервисов или элемента управления, выводяще го комментарии Разметка шаблонов, используе мых элементами управления Repeater и DataList, например ItemTemplate для элемента управления DataList фотогалереи Stylesheet Все базовые стили, используемые на страницах, вроде а также специфичные для модулей стили вроде Большинство тем (но не все) содержит лишь одну таблицу стилей, В дополнение к таблицам стилей папка Styles содержит изображе ния, используемые в таблицах стилей Images Изображения, требуемые пользо вательским элементам управления Для создания новой темы добавьте подпапку в папку mon\Themes. Имя темы формируется по имени папки. В этой папке со здайте дополнительные папки, приведенные в табл. 2. К счастью, вам не придется заполнять каждую папку так как все темы наследуют от Быстрое 3X базовой темы Default. Таким образом, если вы не предоставите свой скин, Community Starter Kit воспользуется скином из темы Default.

Хотя тема Default содержит более 75 файлов, для создания базовой темы потребуется всего несколько файлов. Я создал базовую тему Small, кото рая является фактически копией Default и отличается от нее лишь тем, что размеры шрифтов синий цвет заменен красным и немного изменена разметка для областей страницы по умолчанию. Моя новая тема состоит из шести файлов;

Х Х Х Х Х Х Конечно, чем больше элементов вы определите, тем законченнее будет выглядеть ваша схема. Создать новую схему легче всего на основе суще ствующей, изменив ее скины и стили.

Создание нового модуля Вы можете создавать новые модули для своего сообщества, хотя это по труднее, чем создать схему. Например, я создал модуль Jobs, обрабатыва ющий объявления о работе.

Для создания модуля сначала добавьте новую таблицу к базе данных и назовите ее (где Ч имя нового модуля). Эта таблица будет хранить элементы нового модуля. Пер вичному ключу таблицы следует имя Создайте также дополнительные поля, необходимые для модуля.

Вам понадобятся хранимые процедуры для добавления новых элементов модуля, редактирования существующих, получения списка элементов и выборки всех полей одного элемента. Хранимые процедуры для модуля Jobs называются и Эти процедуры я создал на основе хранимых процедур из модуля Articles, добавив поля, необходимые для хранения объявлений о работе. извлекает список объявлений для страницы Jobs_Section. Для разбиения вывода на Web-приложения отдельные страницы модуль tent (рис. 3).

Рис, 3. Хранимая процедура int, int, int, SET о Email, FROM ) ON BY Быстрое освоение приемов Создайте новую папку в для кода модуля, а в ней Ч три Content и Controls. Для модуля Jobs я создал пап ки и В папке Components должно быть две биб лиотеки классов: первая содержит производный от a вторая Ч вспомогательный класс, отвечающий за вызов хранимых проце дур модуля.

Используя версию Community Starter Kit для Visual я создал библиотеку классов с единственным классом В качестве основы своей библиотеки классов я задействовал vb. Конструк тор Joblnfo принимает единственный параметр, объект DataReader, с по мощью которого он получает все поля из таблицы Jobs и записывает их в закрытые переменные. Эти переменные доступны как класса Joblnfo (рис. 4).

Рис. 4. Фрагменты класса Joblnfo Contentlnfo Private As Boolean AS String * Private _startDate As String * As = Private As String = Private As String = Private As String Private As String * Private As String Public Sub As ' Заполнить обязательные поля * ' поля If Not Is Then см. след. стр.

Web-приложения Рис, 4. Фрагменты класса Joblnfo End If If fiot Is = If If Mot Is Then If If Hot Is If If Is find If If Is ж End If If Is * If If Not Is End If If Sot Is If If Not End If End Sub String As * End т, д, Класс обеспечивает интерфейс между модулем Jobs и одноимен ной хранимой процедурой. Он содержит четыре метода: Editjob, и Метод вызывает хранимую процедуру и возвращает из объектов Joblnfo (рис. 5).

Быстрое приемов Web-сайта Рис. 5. Метод GetJobs класса JobUtility Function As String, As Аз _ ByVal As As As As =.

cmdGet, Parameters. username) pagelndex) New dr As = While coUobs Папка Content должна содержать одну библиотеку классов для каждого базового типа страницы, поддерживаемого Эти классы станут отделенным кодом (code behind) пользовательских элементов управления.

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

Я создал четыре библиотеки классов Ч JobSecti on.vb и Job.vb, Ч каждая из которых на Articles.

Content-классы являются связующим звеном между классом и скинами пользовательских элементов управления. Класс Job из библиоте ки классов Job.vb отвечает за вывод полной информации по объявлению (рис. 6).

Рис. 6. Библиотека классов Namespace Jobs>

Рис. 7. элемент управления Imports Public>

Рис. 7. Нестандартный элемент управлений ' If Mot Then As If Hot Is Sub Public Property As End Get Value As Set Protected Overrides Sub fienderCoFrtentsC writer As End>

Я создал три пользовательских элемента управления в папке Themes\De Jobs_AddJob.ascx, и Для редактирования объявления элемент управления не предусмотрен, так Jobs_AddJob.ascx работает за двоих, обеспечивая и добавление, и редактирование объявления. Фрагмент кода пользователь ского элемента управления приведен на рис. 8. Обратите внимание на ссылки на нестандартные серверные элементы управления и в папке На этом этапе я добавил стили к таблице стилей по умолчанию (The mes\theme\Styles\default.css) для новых контент-элементов управления (content controls). Некоторые из новых стилей даны на рис. 9.

Web-приложения Рис. 8. Пользовательский элемент Jobs_Job.ascx fturat="Server"> Рис. 9. Некоторые из новых стилей для модуля bold;

font-size:

font-variant;

sans-serif;

solid font-size: 17px;

font-style:

12рх;

bold;

font-style: italic;

12px;

Быстрое освоение приемов Наконец, я добавил записи для страниц элемента (item page) и раздела элемента (item section page) в таблицы и в базе данных. Это сделать довольно просто благодаря хранимой процедуре которую я со здал на основе существующей хранимой процедуры Запустив ее, я генерирую все необходимые записи.

На рис. 10 показана страница JobSection для сайта сообщества Ballard При щелчке ссылки Read под объявлением откроется страни ца Job, показанная на рис. 11.

Рис. 10. Страница JobSection Скачать файлы, входящие в модуль Jobs (а также тему Small), можно с сайта Magazine по ссылке в разделе за август.

Заключение ASP.NET Starter Kits содержит несколько приложений-примеров, которые полезны как в качестве функциональных шаблонов Web-сайта, гак и в ка честве образцов кода на Visual C# и J#. Его наборы представ Web-приложения - ttir.msufi:

Рис. 11. Страница Job наиболее распространенные Web-приложения Ч для сообществ, электронной коммерции, порталов, генерации отчетов и учета времени по проектам. В этой статье я рассказал об использовании стартовых наборов, а также о способах расширения и адаптации Community Starter Kit (даже при отсутствии Visual Studio Эти наборы помогут вам быстро при ступить к разработке ASP.NET-сайта. Стоит отметить, что некоторые ком пании, предлагающие Web-хостинг, обеспечивают автоматическое развер тывание стартовых наборов и регистрацию учетной записи. Детали см. на Спасибо Уолтеру (Stephen за помощь при написании этой статьи.

Пол Litwin) Ч CEO и старший преподаватель в компании Deep предлагающей обучение в области технологии Председатель конференции Microsoft ASP.NET Connections. Автор и соавтор ряда в том числе ASP.NET for (SAMS, 2001). Сейчас работает над книгой по ASP.NET. С ним можно связаться по адресу paull@deeptraining.com.

Джейсон Лефевр и Роберт Лэр ASP.NET Средства аутентификации и проверки форм в приложениях электронной коммерции* Если вы планируете создать сайт электронной коммерции, вам будет приятно узнать, что ASP.NET максимально упрощает эту задачу.

щие элементы управления и их расширения, вы получите такую функциональ ность, о которой даже и не мечтали. В этой статье показывается, как проверять идентификацию пользователей через аутентификацию на основе форм (forms-based authentication) и как блокировать доступ неавторизован ным к определенным областям сайта. Колоссальные возмож ности и гибкость элементов управления верификации (validation демонстрируются на примере элемента который соединяется с Web-сервисом, проверяющим адреса. Кроме того, демонстрируется, как на основе элемента DataGrid ASP.NET реализовать корзину покупателя cart). В заключение поясняется, как выполняются связанные с авторизацией кредитных карт.

Прежде чем выводить свой бизнес в Интернет, сайт электронной коммерции, нужно определить каталог товаров и услуг, которые вы соби раетесь предлагать через Web. В этом деле ASP.NET вам, конечно, не по зато позволит разработать логичную и эффектную систему управ ления и навигации по каталогу на основе пользовательских элементов управления (user controls).

Публиковалось в MSDN Magazine/Русская 2002. № 2 (август). Ч Прим, изд.

11- Пользовательский элемент управления инкапсулирует логически выде ленную часть функциональности Такой элемент в чем-то по хож на включаемый файл (include file) в ASP 3.0. Вместо того чтобы до бавлять код, поддерживающий систему меню, в каждую страницу прило жения, можно выделить его в один файл и вставлять пользовательский элемент управления везде, где нужно. Тогда вы получаете единую точку модификации меню и избавляетесь от необходимости вносить одни и те же изменения в каждую страницу приложения.

Однако между пользовательскими элементами управления в ASP.NET и включаемыми файлами в ASP 3.0 есть несколько важных различий. Во пользовательские элементы обрабатываются так же, как и насто ящие (real controls). Вы можете значения от пользовательско го элемента, передавать их ему и вызывать любые открытые методы, пре доставляемые этим элементом. Кроме того, для большей производительно сти можно выводимые им данные. По сравнению с включае мыми файлами пользовательские элементы обеспечивают гораздо большую гибкость в проектировании приложения.

Первое, что нужно сделать при разработке пользовательского элемента управления, Ч решить, какую функциональность он будет реализовать. В случае с меню каталога это легко. На рис. 1 показан созданный нами пользовательский элемент управления меню. Как видите, это простое горизонтальное меню, позволяющее выбирать различные категории това ров. Соответствующий код приведен на рис. 2.

3 Х I to Рис. 1. Горизонтальное меню Рис. 2. элемент Control см. след. стр.

Средства аутентификации и проверки форм Рис. 2. Пользовательский элемент меню void // выделенный элемент списка * if // и его с "список" new Initial "SELECT * // Открыть с базой // данные и их с }

+ /> см. след. стр.

Рис. 2. Пользовательский элемент /> | Исходный код пользовательского элемента управления логически разделен на три части. В самом начале находится набор директив, указы вающих язык программирования и импортирующих пространства имен.

Далее размещается сценарий, выполняемый на серверной стороне. У это го сценария две задачи: обработка текущей выделенной ссылки из набора (collection) Request для выбранного элемента меню, а также получение списка категорий из данных и его связывание с Web-эле ментом DataList.

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

Для этого элемента можно определить семь шаблонов, каждый из которых влияет на его внешний вид:

Х Х Х plate;

Х Х leTemplate;

Х Х Нас интересуют два шаблона из этого списка: и Selectedltem Template. Первый содержит HTML-разметку для всех элементов в Data List, а второй Ч для выбранного элемента и перекрывает ItemTemplate. Вот базовый DataList, для которого определены шаблоны ItemTemplate и SelectedltemTemplate:

Средства и проверки форм > Когда запрашивается страница, содержащая этот элемент связы вается с в котором хранится некий набор записей. Для каждой записи DataList создает новый элемент меню на основе HTML из тэга а для текущего элемента он использует HTML из тэга . После того как код, показанный на рис. 2, помещается в файл в корневом каталоге нужно всего две чтобы задействовать элемент управления в любой Web-форме этого приложения. Во-первых, зарегистриро вать элемент управления с помощью в начале формы:

После регистрации его можно в любое место Web-формы, приме няя стандартный синтаксис XML:

/> На рис. 3 показано, как добавить пользовательский элемент управления к Web-форме.

Рис. 3. Добавление элемента меню" к Web-форме

Начало страницы Welcome to Widgets online!

--> Аутентификация пользователей Аутентификация Ч распространенная задача в электронной коммерции.

Пока просто просматривает ваш информацию о нем можно хранить в cookie или объекте Session, но как только он решает за регистрироваться или что-то купить, вам нужно аутентифицировать его и сохранить подробную информацию о нем. Аутентифицировать пользова теля имеет смысл сразу при входе на сайт, перед добавлением первого то вара в корзину или при оформлении заказа. Независимо от того, когда вы выполняете эту операцию, реализовать аутентификацию на основе форм в ASP.NET очень просто.

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

loginU /> Пусть страница оформления заказа называется Тогда до бавьте в конфигурационный раздел файла следующий код:

часть файла />.

Теперь при любой попытке обратиться к CheckOut.aspx неавторизованный пользователь будет перенаправляться на страницу login.aspx, где можно реализовать любой из нескольких способов аутентификации. Можно, на соединяться с сервером RADIUS (Remote Authentication Dial-in User Service), выполнять аутентификацию по протоколу (Light weight Directory Access Protocol) или просто проверять имя и пароль пользователя по базе данных SQL.

и проверки форм Независимо от способа аутентификации перенаправление пользователя на изначально запрошенную страницу осуществляется вызовом статическо го метода:

с reatePe Первый аргумент Ч строка, идентифицирующая пользователя. Второй булево какой cookie создается (постоянный или временный). Неудачные попытки аутентификации можно обрабатывать как угодно. Но обычно в таких случаях или выводят или пе ренаправляют пользователя на какую-то другую страницу.

Впоследствии, если вам понадобится узнать имя аутентифицированного пользователя, вы можете выяснить его через User.Identity.Name, получив значение, которое было передано в аргументе username метода Page. Таким образом можно создать систему адресной рекламы, нацеленную на конкретных пользователей.

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

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

Детальное описание этих элементов не входит в наши цели, но на рис. приведен код, новый трюк: использование нестандарт ного элемента верификации (custom validator) в сочетании с Web-серви сом, проверяющим адрес пользователя по базе данных Рис. 4. Использование с см. след. стр.

USPS Ч United States Postal Service служба США). Информацию об онлайно вых услугах этой службы см. на сайте Ч Прим.

Web-приложения Использование Sub sender As e As } If If "Address validation succeeded," Else " "failed! out all " sure you have entered " + zip End If If Sub Public Sub source As args As > Dim as полей as String String as String = as ' Создать zipGhecker as ' (Web-сервиса sResults sCity, sState ) ' прошла успешно, * совпал с ' If sResults then True False End If Sub