WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!

fturat=»"Server">
Pages:     | 1 |   ...   | 2 | 3 || 5 |

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

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

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

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

С public override void <.

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

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

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

throw fcttp:

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

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

Исходный код для этой статьи можно скачать по ссылке http://msdn.mic 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 Class Этот простой сервис принимает в качестве входнх параметров названия двух городов и возвращает стоимость доставки товара из одного города в другой. Подробнее о синтаксисе ASP.NET см. по ссылке asp.

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

Регистрация в UDDI Оптимальный способ регистрации Web-сервиса с описа ния (WSDL-дескриптором) в UDDI изложен в документе http://www.ud В данном случае я зарегистрирую сервис 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-сервис Class : Inherits Function as Quote •;

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

' " Class QuoteRequest As As Public Class Quote Public as Integer End Я зарегистрировал сервис на Microsoft точно так как и предыдущий.

Создание для нового сервиса Как и прежде, вам следует найти с помощью 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 г. и работающего с пользовательскими атрибутами (http://msdn.mic Рассмот рим этот код.

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

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

Select Button) Case 0 :

Case 1 :

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

Рис. 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* Class" & Return End As String) Case : Return False Case :

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 Class.

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

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

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

Кен Спенсер (Ken Spencer) работает в компании 32Х Tech (http://www.32X.com), которая занимается разработкой ПО и обучением, а также предоставляет консалтинговые услуги по технологиям 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. Вы можете скачать их по ссылке http:// В набор входят приложение — витрина магазина электронной 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-сервис вроде http://msdn.microsoft.com/ Любой раздел стороннего сайта можно сделать доступным с помощью 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 г. по ссылке http://msdn.microsoft.com/msdnmag/issues/03/04/ASPNETUser Затем 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 Class Job Inherits Private Аз String = Private As Public Sub Sub End Namespace Папка Controls будет содержать нестандартные серверные элементы уп равления для каждого объявления о работе, выводимого на страницах Job и JobSection. Для страницы Job я создал серверные элементы управления JobTempStatus, Months, JobStartDate, JobExperience, JobContactEmail, и а для страницы Job Section — элемент управления Нестандартный элемент управления JobCompany на рис. 7.

Рис. 7. элемент управления Imports Public Class Private „text As Public Sub см. след. стр.

Рис. 7. Нестандартный элемент управлений ' If Mot Then As If Hot Is Sub Public Property As End Get Value As Set Protected Overrides Sub fienderCoFrtentsC writer As End Class Теперь нужно создать пользовательские элементы управления, представ ляющие контент-скины для базовых страниц модуля, соответствующих ранее созданным классам Вы должны предос тавить минимум один набор пользовательских элементов управления (контент-скинов) для темы Default. Контент-скины можно создать и для дополнительных тем.

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

Web-приложения Рис. 8. Пользовательский элемент Jobs_Job.ascx

Рис. 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-хостинг, обеспечивают автоматическое развер тывание стартовых наборов и регистрацию учетной записи. Детали см. на http://www.asp.net/hosters.

Спасибо Уолтеру (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

Средства и форм field left blank ".

flequiretfFieldValidator>

s teSe shipping fields and that.

Button Web-сервис предоставляется через Если вы перейдете по этому URL и выберете такой Web-сервис, то увидите, что у него четыре метода, каждый из кото рых немного по-разному проверяет и адреса. Мы обращались к методу ShortZipCode. Чтобы посмотреть на этот метод в действии, перей дите на и введите код доступа (для тестирования — 9999), адрес, город и штат, а затем щелкните Invoke. Web-сервис возвращает в XML-пакете строку с соответствующим введенному адресу.

Перед вызовом Web-сервиса нужно как-то сообщить компилятору о его (сервиса) методах и аргументах. Для этого можно создать прокси-класс с помощью утилиты WSDLexe из Microsoft Framework. Исходный код этого вполне читаем (и полезен);

его задача — переправлять локальные вызовы метода Web-сервису. Кроме того, он извлекает возвра щаемые значения из получаемого от Web-сервиса, и тем са мым избавляет от необходимости разбирать (parse) XML в вашем коде.

Средства и проверки форм WSDL.exe очень проста в использовании. Следующая команда создает на языке Visual в текущем каталоге:

Вызванная с этими аргументами, утилита соединяется с Web-сервисом анализирует контракт и создает в теку щем каталоге файл с исходным кодом на Visual Basic Чтобы задействовать этот класс, скомпилируйте его в библиотеку и поместите в каталог /bin корневого каталога вашего Web-приложения.

Для компиляции ZipCodeResolver.vb в DLL введите команду:

/ / / / Эта команда создает в текущем каталоге файл кото рый надо поместить в каталог /bin корневого каталога Web-приложения.

Теперь вызов метода Web-сервиса ничем не отличается от вызова метода любого локального класса.

Как выглядит наша форма после загрузки в браузер, показано на рис. 5.

Обратите внимание на элемент управления CustomValidator (его код на ходится в конце листинга на рис. 4). Он проверяет на форме поле ZIP кода. При передаче формы на сервер вызывается метод enter ship-to address:

1:

City:

Zip Рис. 5. загруженная в браузер Web-приложения Этот метод создает экземпляр объекта из ранее сгенери рованного прокси-класса. Для доступа к данному объекту нужно импорти ровать пространство имен ZipCodeResolver директивой Import (см. нача ло листинга на рис. 4). Затем ServerValidation вызывает метод Code Web-сервиса ZipCodeResolver и сравнивает введенный пользовате лем с полученным от Web-сервиса. Если они проверка считается и свойство элемента устанав ливается в В ином случае свойство IsValid приравнивается false, со держимое страницы считается недопустимым, и пользователю выводится сообщение об ошибке (рис. 6). Если же ZIP-код правилен, отображается страница, приведенная на рис. 7.

Zip см. след. стр.

330 Web-приложения Рис. 4. Использование...

/xb > >

Узнайте, что такое Саентология...

Ваша жизнь поменяется...

Magazine 1 digit).

Рис. 6. Сообщение ошибке Наш пример пока не годится для сайта электронной коммерции: сервис ZipCodeResolver, предоставляемый предназначен исключи тельно для личного пользования, так как за информацией об адресах он обращается на сайт USPS. Но это не единственная причина, препятству ющая применению этого кода на реальном сайте. Если в базе данных USPS окажется какая-нибудь ошибка или если ваш клиент недавно сме нил адрес, он получит сообщение об ошибке, а вы потеряете Во многих Интернет-магазинах проверка адреса покупателя является частью бизнес-логики сайта и проводится оформления заказа, но до его ис полнения. Это позволяет предупредить покупателя о возможной пробле ме и резко уменьшить число оформленных заказов.

Средства аутентификации и проверки форм succeeded.

1 Eighth ork State;

Zip Рис. 7. Проверка прошла успешно Реализация корзины покупателя Ни один сайт электронной коммерции нельзя считать законченным без поддержки корзины покупателя. Эта корзина служит временным хранили щем товаров, которые собирается приобрести клиент.

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

Web-элемент DataGrid, обладающий широкими возможностями, значи тельно упрощает корзины покупателя в среде ASP.NET. В ASP 3.0, чтобы отобразить на странице набор записей в виде таблицы, прихо дилось построчно считывать его и самостоятельно заботиться о HTML коде, создающем таблицу. DataGrid делает это за вас. Просто передайте ему DataTable через свойство свяжите с источником и таблица будет построена без вашего участия. Внешний вид DataGrid легко меняется с каскадных таблиц стилей (cascading style sheets, CSS). Детали см. по ссылке Web-приложения Вот пример использования DataGrid:

Здесь свойство Columns установлено в true, и DataGrid про сто отображает все данные, переданные ему в DataSet.

Такого кода достаточно для элементарного отображения данных, но, по скольку мы реализуем корзину покупателя, нам нужна более тонкая на стройка DataGrid — например, можно было изменять количество единиц товара.

К счастью, DataGrid контролировать каждый столбец таблицы.

Прежде всего надо свойство в false. Тог да можно обращаться к набору столбцов DataGrid, помещая их в тэг <со Это, кстати, проще, чем кажется. Следующий код выводит только два столбца — Product Name и Model. Так как соответствующие поля не требуют особого форматирования и поддержки для опре деления столбца достаточно использовать Web-элемент BoundColumn:

/> Number" /> Этот код создает таблицу, как на рис. 8. Так что, если вы хотите самостоя тельно добавлять элементы в набор столбцов DataGrid, используйте тэги.

Model Alice Aniseed Syrup Crab АО Рис. 8. Данные, отображаемые DataGrid Средства аутентификации и проверни форм Почему мы решили работать со столбцами вручную? У пользователя дол жна быть возможность изменять количество единиц товара в Элемент не поддерживает эту функциональность. К счас тью, есть и другой тип столбцов — TemplateColumn, который обеспечива ет гораздо больший контроль за внешним видом и содержимым столбцов таблицы. Если взять предыдущий пример, то для добавления столбца, по зволяющего изменять количество единиц товара, нужно просто включить TemplateColumn в набор (рис. 9).

Рис. 9. Применение и /> />

"Quantity") Новый столбец, созданный кодом, который показан на рис. 9, содержит Web-элемент TextBox. Метод DataBinder.Eval выводит в TextBox значение Quantity из базы данных. Таким же способом можно вставлять и другие Web-элементы, например и Label.

Вы только что видели, как добавить редактируемое текстовое поле к Web элементу DataGrid. Это, конечно, интересно, но без сохранения изменений в базе данных совершенно бесполезно. Обратите внимание, что свойству ID элемента TextBox на рис. 9 присваивается значение Quantity. Значит, чтобы получить соответствующее значение после отправки Web-формы с покупательской корзиной, достаточно обратиться к Quantity.Text, верно?

К сожалению, это не так. Простого способа получить это значение нет.

Сохранить измененное значение в базе данных было бы легче всего так:

пройти в цикле по всем строкам DataGrid, используя набор Items, найти TextBox через метод получить значение из TextBox, а затем сохранить его в источнике данных средствами ADO.NET:

Dim As Integer i = 0 To - ' Получить ссылку на элемент управления, ' соответствующий строке Dim As TextBox = _ ("Quantity"), ' Теперь можно обратиться к значению * и сохранить его в источнике данных Next Рассмотрение ADO.NET-кода, сохраняющего информацию в базе данных, выходит за рамки этой статьи. Пример такого кода (IBuySpy) можно ска чать по ссылке http://www.ibuyspy.com/. Подробнее об элементах семей ства DataGrid см. в архиве рубрик «Cutting (http://msdn.micro Подключение к центрам обработки кредитных карт После оформления заказа вы должны проверить, способен ли покупатель расплатиться за С одной стороны, было бы противозаконно списы вать деньги с кредитной карты, не отправив товар, с другой — глупо от правлять товар, предварительно не убедившись, может ли клиент оплатить его. В связи с этим компании, обрабатывающие кредитные карты, предла гают способ быстрой авторизации таких карт. Авторизовав кредитную кар ту, вы можете быть уверены, что после отправки заказа нужная сумма на ней будет (за исключением тех редких случаев, когда, например, действие карты прекращается в течении короткого промежутка между авторизаци ей и списанием денег со счета).

Большинство компаний, обрабатывающих кредитные карты, предоставля ют специальные ActiveX DLL. Такая DLL обеспечивает ваше соединение с сервером нужной компании и выполнение авторизации кредитной кар ты. В ближайшем будущем эти компании будут предоставлять сборки (assemblies), подключаемые непосредственно к проектам в Visual Studio или ASP.NET. А пока приходится использовать СОМ.

В ASP.NET для доступа к всего использовать по зднее связывание (late binding). Как и в ASP 3.0, объект Server в ASP.NET включает метод CreateObject, который возвращает экземпляр любого СОМ-объекта, зарегистрированного в системе. Пусть вашего ком понента — Authorize. Тогда для его использования в ASP.NET достаточно создать, например, такой объект;

Object oAuthor = Вы можете обращаться к методам и свойствам этого объекта так же, как в ASP 3.0 или Visual Basic 6.0.

Средства аутентификации и проверки форм Вместо того чтобы обращаться к СОМ-объекту через механизм позднего связывания, который заметно ухудшает производительность, можно со здать Прокси-класс содержит все необходимое для соедине ния с кроме того, сообщает компилятору о методах и свойствах, поддерживаемых объектом. А в Visual Studio это позволит использовать для объекта технологию Microsoft Frame work поставляется с утилитой tlbimp.exe (Type Library Importer), автома тически создающей такой Она запускается из командной строки:

Поместите созданную DLL в каталог /bin корневого каталога своего при ложения и вы сможете работать с СОМ-объектом, как и с любым другим объектом ASP.NET.

Производительность и ASP.NET предлагает несколько новых средств для повышения производи тельности сайта электронной коммерции. Одно из таких средств — кэши рование данных. ASP.NET позволяет хранить (с точки зрения производительности) объекты в памяти. В частности, для большей произ водительности сайта можно кэшировать запросы к базе данных применительно к редко изменяемым сведениям (например к опи саниям товаров).

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

Cache("Categories") = Считать объект из кэша можно так:

= DataSet) Заметьте, что метод Ctype приводит объект, извлекаемый из кэша, к типу DataSet до присвоения объектной переменной. Это связано с тем, что кэш возвращает объект универсального типа object. Объекты хранятся в кэше до перезапуска приложения или сброса кэша вручную. Полный пример кэширования обращения к базе данных приведен на рис. 10.

Если вы реализуете кэширование в компоненте, вам понадобится находить текущий экземпляр объекта Cache через объект HttpContext:

context = После этого к кэшу можно обращаться командой Рис, 10. Кэширование DataSet public static { // в null > // DataSet из кэша return // DataSet из базы { // ЛЕЮ. НЕТ и * ЗДСс*мтК''8ЕШ!Т, // объекты и DataSet DataSet ds = new // Открыть с данных // // Закрыть с // кэш // DataSet return ds;

Пока что мы рассматривали простейшие способы использования объекта Cache. Добавляя новые элементы в кэш методом Insert объекта вы можете указывать зависимости и сроки жизни кэшируемых элементов.

Допустим, меню хранится в XML-файле, расположенном в корневом ка талоге Web-сайта, и кэшируется при первом обращении. Естественно, меню должно автоматически отражать изменения, внесенные в XML файл. Метод Insert позволяет создать зависимость объек та от XML-файла. Тогда при изменении файла меню удаляется из кэша и снова помещается туда при следующем обращении. Чтобы поместить меню в кэш, вызывайте метод Insert объекта Cache так:

new Средства и проверки форм В первом аргументе указывается имя элемента. Во втором — передается сам элемент. Последний аргумент имеет тип Cache Dependency и определяет местонахождение файла, от которого зависит элемент.

Кроме кэширования отдельных объектов, ASP.NET поддерживает кэширо вание вывода (output caching). Когда на странице разрешено кэширование вывода, никакой код не выполняется и обращение к диску не производит ся. Страница выводится из памяти идеальный выбор для редко изменя емых страниц приложения. На странице с динамичным информационным наполнением применять кэширование вывода не следует. Иначе каждая версия страницы будет кэшироваться отдельно, что уменьшит производи Есть и другие способы реализации кэширования вывода. Самый простой из них — вставить в начало страницы директиву:

Тогда кэшируется весь результат. Длительность кэширования указывает ся в секундах.

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

Исходный код для этой статьи можно скачать по адресу load.microsoft.com/download/msdnmagazine/code/Aug02/WXP/EN-US/ Лефевр (Jason Lefebvre) — соучредитель и вице-президент компа нии Intensity Software Inc. Участвовал в работе над NetCOBOL-версией демонстрационного приложения Соавтор книги Yourself ADO.NET in 24 Hours* (Sams, 2002).

Роберт Лэр (Robert Lair) — президент и генеральный директор компании Intensity Software Inc. В соавторстве с Лефевром написал книгу (Sams, 2001). Освоил Microsoft еще в начале 2001 г., когда приступил к работе над демонстрационным приложением IBuySpy.

С ним можно связаться по адресу robertlair@asppages.com или через http://www.robertlair.com.

Пол Яо и Дэвид Дюраи Беспроводная Web Создание Web-приложений, способных взаимодействовать с любыми мобильными устройствами* Если вы уже создавали на основе ASP.NET, то с радостью примете новый инструментальный набор — Mobile Internet Toolkit дополняет уже знакомую вам интегрированную среду разработки Visual Studio новыми элементами упрощающими создание приложений для беспроводных устройств. Это позволит писать меньше кода и в то же адаптировать его под более широкий спектр устройств. MMIT не только интегрируется с Visual Studio но и расширяет ASP.NET. В этой статье вы узнаете, что необходимо для написания, тестирования и разверты вания сайтов с MMIT, а также как сделать весь их код способным взаимодей ствовать с любыми устройствами.

Каждый, кто имел дело с каким-нибудь языком разметки, знает, что это занятие подобно плаванию в океане тэгов, населенном такими чудищами, как HTML и WML. Хотя с виду они вроде пропасть в сплетениях их длинных щупальцев очень легко. Проблема в том, что без этих языков не и создание приложений для мобильных устройств не являет ся исключением.

Microsoft Mobile Internet Toolkit (MMIT) позволяет программистам, ис пользующим ASP.NET, дополнять свои Web-сайты поддержкой мобиль в MSDN Magazine/Русская 2002. № 5 (ноябрь). — Прим. изд.

Создание Web-приложений Интернет-устройств, не бросаясь в запутанный мир языков. Если до сих пор вы старательно игнорировали все, что свя зано с мобильными технологиями и то могли пропустить и статью Эрика (Eric Griffin) Mobile Web SDK: Build and Test Wireless Web Applications Phones and на момент написания ко торой пребывал на стадии бета-версии. В этой статье рассматрива ется идея создания Web-сайтов, поддерживающих мобильные телефоны с технологией WAP, и демонстрируется, насколько ASP.NET облегчает пост роение таких сайтов. Между тем финальная версия на удивление мало изменилась по сравнению с бета-версией, так что статья Гриффина — по-прежнему отличный источник базовой информации по этой тематике.

В нашей же статье речь пойдет об основной функциональности, доступной в финальной версии MMIT. Мы начнем с описания того, как MMIT под держивает разнообразные языки разметки и мобильные устройства. (Эта функциональность упрощает поддержку мобильных устройств на Web сайтах с ASP.NET.) Затем мы обсудим интеграцию MMIT и Visual Studio,NET. Вы узнаете, как создавать формы для мобильных устройств все тем же методом drag-and-drop и каким образом код на С# и Visual Basic поддерживает элементы управления для мобильных устройств (далее для краткости — мобильные элементы управления). Затем мы детально рас смотрим, что привносит MMIT в ASP.NET, продемонстрировав связи меж ду пространствами имен и классами обычных и мобильных элементов уп равления. А под занавес мы покажем пример для мо бильных устройств — MovieFinder. Здесь вы увидите, как MMIT позволя ет использовать одно и то же приложение как на устройствах Pocket PC (и Pocket PC Phone Edition), поддерживающих так и на сотовых телефонах с поддержкой WAP/WML.

ASP.NET упрощает разработку для мобильных устройств Программисты на ASP.NET могут радоваться: жуткая смесь тэгов и сцена риев осталась в прошлом (конечно, кроме тех случаев, когда нужно под держивать существующие Web-страницы). Отделение контента (информа ционного наполнения) от кода означает, что теперь HTML может жить в а серверный код — в файле с исходным текстом на С# или Visual Basic. Таким образом, серверный код может пользоваться всеми преимуществами Microsoft Framework: рациональной организацией пространств имен, средствами ООП (в том числе наследованием, поли морфизмом и вложением), стандартными типами данных и унифициро ванным интерфейсом программирования.

Поддержка нескольких языков разметки Создание Web-сайта на языках разметки — задача не из легких. Если что то отображается можно часами лазить по тэгам, пытаясь по нять — почему. И даже в который по большей части сам управляет тэгами, им иногда приходится уделять внимание. Кроме того, хотя предоставляет набор элементов управления, их возможностей хватает не всегда;

в таких случаях вы можете добавлять собственные элементы (так же, как в ASP.NET). Создание собственных (нестандартных) элементов управления MMIT однозначно требует понимания соответствующего язы ка разметки.

Если целевое устройство использует язык разметки, поддерживаемый MMIT, основная часть работы делается автоматически. А если это не так, вам, возможно, придется вернуться к прежнему подходу: самому писать все с нуля. Например, MMIT уже не поддерживает тэги HDML (Handheld Device Markup Language), применяемые в устаревших браузерах для сото вых телефонов, и еще не поддерживает новейшие тэги WML 1.3. Четыре поддерживаемых языка разметки перечислены в табл. 1.

Табл. 1. Языки поддерживаемые MMIT 1. Язык Описание HTML 3.2 Pocket Internet Explorer на Pocket PC, Pocket PC и Pocket PC Phone Edition cHTML 1,0 Подмножество HTML 2.0 и 3.2, разработанное для устройств со скромным объемом памяти, работающих от батарей (например для мобильных телефонов) WML 1.1 и 1.2 WML (Wireless Markup Language) — стандарт для HTML подобных языков разметки текста, созданных для беспро водных мобильных устройств;

WML частью большего набора протоколов под общим названием WAP (Wireless Application Protocol) Учтите, что в любой момент может выйти новая версия MMIT или по явиться Device Update который добавит в MMIT новую функцио нальность. Чтобы идти в ногу со временем, изучите класс ties в документации MMIT. Для программистов на ASP.NET это расшире ние класса добавляющее элементы для мобиль ных Web-устройств. Чтобы узнать, какие еще языки разметки поддержи вает MMIT, обратите внимание на свойство класса В MMIT 1.0 это свойство (только для чтения) допуска ет следующие значения: и chtmllO.

Web-приложений HTML 3. Как известно, последняя версия HTML на сегодняшний день — 4.0;

она поддерживается Microsoft Internet Explorer 6.0. HTML 3.2 — более простая разновидность HTML, поддерживаемая Pocket Internet Explorer, постав ляемым с Pocket Pocket PC 2002 и Pocket PC Phone Edition. (Разра ботчики, использующие Platform Builder в Windows CE должны знать, что это тот самый Pocket Internet Explorer, который находится в папке Internet Client Services в Platform Builder.) Итак, в чем же различия между HTML 3.2 и 4.0? HTML 3.2 поддерживает обычные и вложенные таблицы (nested tables), применявшиеся для струк туризации Web-страниц до введения фреймов. В HTML 3.2 нет концепции каскадных таблиц стилей (CSS), поэтому вместо использования стилей с удобными именами все элементы форматирования приходится по старин ке в код. HTML 3.2 не поддерживает обработку на клиентской стороне, поэтому проверять данные на допустимость или вводить в элементы анимации с помощью DHTML нельзя. что Pocket Internet Explorer никогда не поддерживал с анимацией, показывая их как статичные картинки.) Также не поддерживается связывание с дан ными на клиентской стороне (тэги DATASRC и ActiveX-элемент для запроса к базам данных).

Сводка тэгов, доступных в HTML 3.2, дана в табл. 2. Это довольно при личный набор тэгов для создания форматированного текста, таблиц и форм ввода данных. Вы можете создавать гиперссылки, отображать текст в полужирном начертании, вставлять поля списки и кнопки пере дачи формы. Этого набора вполне достаточно для поддержки электронно го справочного текста, и именно поэтому HTML принят в каче стве стандартного формата справочных файлов на платформе Pocket PC.

Табл. 2. Тэги, в HTML 3.2 и HTML-тэг HTML 3.2 cHTML HTML-тэг HTML 3.2 cHTML V А KBD ACRONYM LABEL ADDRESS LI APPLET LINK s AREA MAP В MARQUEE V MENU BASE BASEFONT META BGSOUND NEXTID Табл. 2. Тэги, поддерживаемые в HTML 3,2 и cHTML HTML-тэг HTML 3.2 cHTML HTML-тэг HTML 3.2 cHTML BIG NOBR BLINK NOFRAMES V BLOCKQUOTE V NOSCRIPT BODY OBJECT BR OL BUTTON OPTION p CAPTION CENTER PARAM CITE PLAINTEXT CODE PRE COL COLGROUP S COMMENT SAMP DD DEL SELECT DFN V SMALL SPAN STRIKE DL V STRONG S DT S STYLE EM SUB EMBED SUP V FIELDSET TABLE FONT V TD FORM TEXTAREA FRAME TFOOT FRAMESET TH THEAD HEAD TITLE V HR TR HTML TT IFRAME UL IMG VAR INPUT S INS XMP ISINDEX Создание также поддерживает JScript и ECMAScript. Java Script, возможности которого в обработке на клиентской стороне меньше, чем у DHTML, все же восполняет часть недостающей функциональности.

Поддержка JavaScript важна еще и потому, что MMIT использует этот язык для проверки и пересылки данных формы с клиентского устройства сервер. Подробнее о HTML 3.2 см. по ссылке http://www.w3.org/TR/ 1. Compact HTML (cHTML) — это производный от HTML язык, созданный для браузеров более простых устройств, чем настольные компьютеры. Он состоит из набора тэгов HTML 2.0 и HTML 3.2 (а также подмножества атрибутов для поддерживаемых тэгов), подходящих для устройств с не большим дисплеем (поддерживающим единственный шрифт), малым на бором клавиш и без координатного устройства. (Чем отличаются тэги cHTML от тэгов HTML 3.2, см. в табл. 2.) Такие обычно рабо тают от батареек и имеют память ограниченного объема.

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

cHTML поддерживает многие средства HTML, в том числе отображение и прокрутку текста, отображение гиперссылок и навигацию по ним, ото бражение форм и пересылку на сервер данных, полученных с формы. А какие средства HTML не поддерживаются? Во-первых, ни одно из средств, специфичных для HTML 4.0, включая фреймы и каскадные сти лей. Во-вторых, тэг FONT, поскольку на таких устройствах всего один шрифт. Не поддерживаются и тэг TABLE (у cHTML-устройств слишком маленький дисплей) и JPEG-изображения из-за очень ограниченного объема памяти (поддержка GIF, к счастью, есть).

В cHTML также отсутствует поддержка JavaScript и других языков сцена риев. Задачи, для выполнения которых MMIT использует языки сценари ев (например, проверка данных и передача форм), должны решаться иначе. Некоторые операции, обычно выполняемые на клиентском устройстве (вроде проверки данных), должны выполняться на 346 Web-приложения сервере MMIT. Подробнее о специфике см. http://www.w3.org/ WML Третий набор поддерживаемый — это 1. и 1.2. WML представляет собой вольную вариацию HTML: часть тэгов у них совпадает (табл. 3). Так что, зная HTML, вы легко освоите и Табл. 3. Общие HTML и Тэг Описание <а> Анкер (anchor) (гиперссылка) Полужирный текст Текст, отображаемый крупным шрифтом Разрыв строки Заголовок


Горизонтальная линия Курсивный текст Встроенное изображение Прием ввода от пользователя Метаданные <р> Абзац
© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.