- Фантастика и фэнтези
- Ироническое фэнтези
- Стимпанк
- Детективная фантастика
- Киберпанк
- Попаданцы
- LitRPG
- Космоопера
- Технофэнтези
- Городская фантастика
- Русское фэнтези
- Юмористическая фантастика
- Космическая фантастика
- Боевое фэнтези
- Эпическая фантастика
- Зарубежная фантастика
- Книги магов
- Мистика
- Разная фантастика
- Разное фэнтези
- Любовное фэнтези
- Романтическая фантастика
- Городское фентези
- Историческая фантастика
- Историческое фэнтези
- Социально-философская фантастика
- Сказочная фантастика
- Иностранное фэнтези
- Романтическое фэнтези
- Ироническая фантастика
- Ужасы и Мистика
- Постапокалипсис
- Героическая фантастика
- Фэнтези
- Научная Фантастика
- Социально-психологическая
- Альтернативная история
- Боевая фантастика
- Разная литература
- Пословицы, поговорки
- Шахматы
- Визуальные искусства
- Фанфик
- Авто и ПДД
- Военное
- Отраслевые издания
- Гиды, путеводители
- Зарубежная образовательная литература
- Военная история
- Цитаты из афоризмов
- Современная литература
- Великолепные истории
- Начинающие авторы
- Современная зарубежная литература
- Боевые искусства
- Изобразительное искусство, фотография
- Кино
- Литература 19 века
- Недвижимость
- Музыка, музыканты
- Готические новеллы
- Истории из жизни
- Культура и искусство
- Спецслужбы
- Зарубежная прикладная литература
- Музыка, танцы
- Подростковая литература
- Прочее
- Военная техника, оружие
- Газеты и журналы
- Периодические издания
- Домоводство, Дом и семья
- Любовные романы
- Экономическая литература
- Научные и научно-популярные книги
- О животных
- Биохимия
- Культурология
- Юриспруденция
- Политика
- Психотерапия
- Языкознание
- Научпоп
- Медицина
- Психология, личное
- Радиотехника
- Филология
- Педагогика
- Образовательная литература
- Деловая литература
- Физика
- Науки: разное
- Химия
- Воспитание детей, педагогика
- Детская психология
- Зарубежная публицистика
- Биология
- Архитектура
- Зарубежная психология
- Науки о космосе
- Социология
- Математика
- География
- Беременность, ожидание детей
- Литературоведение
- Транспорт, военная техника
- Обществознание
- Зоология
- География
- Альтернативная медицина
- Иностранные языки
- Ветеринария
- Рефераты
- Астрология
- Биофизика
- Экология
- История Европы
- Учебники
- Шпаргалки
- Государство и право
- Ботаника
- Религиоведение
- История
- Техническая литература
- Прочая научная литература
- Психология
- Детективы и Триллеры
- Справочная литература
- Проза
- Новелла
- Юмор
- Проза
- Историческая проза
- Русская современная проза
- Советская классическая проза
- Повести
- Очерки
- Эссе
- Рассказы
- Зарубежная современная проза
- Сентиментальная проза
- Зарубежная классика
- Афоризмы
- Эпистолярная проза
- Феерия
- Семейный роман/Семейная сага
- Разное
- Антисоветская литература
- Магический реализм
- Русская классическая проза
- Современная проза
- О войне
- Контркультура
- Классическая проза
- Поэзия, Драматургия
- Детская литература
- Детская фантастика
- Детские остросюжетные
- Детские стихи
- Детские приключения
- Внеклассное чтение
- Учебная литература
- Зарубежные детские книги
- Бизнес
- Загадки
- Книги для подростков
- Школьные учебники
- Детский фольклор
- Книги для дошкольников
- Детские детективы
- Детская познавательная и развивающая литература
- Буквари
- Прочая детская литература
- Сказка
- Детская проза
- Детская образовательная литература
- Юмор
- Документальные книги
- Бизнес
- Внешнеэкономическая деятельность
- Тайм-менеджмент
- Кадровый менеджмент
- О бизнесе популярно
- Управление, подбор персонала
- Бизнес
- Менеджмент и кадры
- Продажи
- Экономика
- Ценные бумаги и инвестиции
- Малый бизнес
- Делопроизводство, офис
- Корпоративная культура, бизнес
- Банковское дело
- Финансы
- Зарубежная деловая литература
- Ораторское искусство / риторика
- Личные финансы
- Интернет-бизнес
- Поиск работы
- Государственное и муниципальное управление
- Бухучет и аудит
- Работа с клиентами
- Менеджмент
- Краткое содержание
- Личная эффективность
- Переговоры
- Приключения
- Старинная литература
- Религия и духовность
- Компьютеры и Интернет
- Блог
Читаем без скачивания C# для профессионалов. Том II - Симон Робинсон
Шрифт:
Интервал:
Закладка:
Другая техника, которую можно использовать, состоит в хранении информации уровня сеанса для использования отдельными пользователями между запросами. Это включает извлечение специфической для пользователя информации из хранилища данных при первом соединении пользователя, которая будет доступна, пока пользователь не прекратит посылать запросы или явно выйдет из системы.
Такие технические приемы не будут здесь рассматриваться подробно, так как лучше использовать для этого специальные книги, посвященные ASP.NET, но это поможет, тем не менее, более широкому пониманию процессов. В следующей главе, имеющей дело со службами Web, мы увидим некоторые из этих технологий в действии.
Заключение
В этой главе был представлен обзор создания приложения Web с помощью ASP.NET. Мы видели, как можно использовать информацию о C#, которая была дана в этой книге совместно с элементами управления сервера Web для получения насыщенной среды разработки. Мы разработали приложение для заказа помещения для проведения мероприятий, чтобы проиллюстрировать многие из доступных технологий, таких как существующие различные серверные элементы управления и соединение данных с ADO.NET.
В следующих двух главах мы рассмотрим две более важные темы Web: службы Web и специальные элементы управления. Мы продолжим разработку примера из этой главы, развивая его в различных направлениях, чтобы проиллюстрировать инструменты, имеющиеся в нашем распоряжении.
В заключение можно сказать, что ASP.NET является новым оружием в арсенале разработчика Web: серверная обработка на данный момент является непревзойденной, а мощнейшие возможности C# и платформы .NET очень привлекательны для пользователей.
Глава 17
Службы Web
Службы Web — это новый способ выполнения удаленного вызова методов посредством HTTP с помощью SOAP (Simple Object Access Protocol — простой протокол доступа к объектам). Раньше это было связано с трудностями, что может засвидетельствовать каждый, кто имеет опыт работы с DCOM (Distributed COM — распределенный COM). Создание экземпляра объекта на удаленном сервере, вызов метода и получение результата были далеко не простыми, а необходимая конфигурация была еще более сложной.
SOAP существенно упрощает ситуацию. Эта технология является стандартом на основе XML который определяет, как можно делать вызовы методов через HTTP воспроизводимым образом. Удалённый сервер SOAP способен понимать эти вызовы и выполнять всю трудную работу, такую как создание экземпляра требуемого объекта, выполнение вызова и возврат клиенту ответа, форматированного SOAP.
Как и в случае ASP.NET мы обладаем всеми возможностями технологий C# и .NET на сервере, но более важно, что простое использование служб Web можно получить на любой платформе, имеющей к серверу доступ HTTP. Другими словами, вполне возможно что код Linux мог бы, например, использовать службы .NET.
Кроме того, службы Web можно полностью описать с помощью WSDL (Web Service Description Language — язык описания служб Web), допуская динамический поиск cлужб Web во время выполнения приложения. WSDL предоставляет с помощью XML со схемами XML описания всех методов (вместе с типами данных, требуемыми для их вызова). Существует широкое множество типов данных, доступных для служб Web, которые простираются от простых примитивных до полноценных объектов DataSet, так что базы данных, расположенные полностью в памяти, могут маршализоваться клиенту, что может в результате привести и существенному сокращению нагрузки на сервер базы данных.
Эту главу мы начнем с синтаксиса SOAP и WSDL, а затем перейдем к их использованию службами Web. Мы обсудим, как предоставлять и использовать службы Web, и разберем полный пример, построенный на основе приложения заказа помещения для проведения мероприятий из предыдущей главы.
SOAP
Как упоминалось выше, одним из способов обмена данными со службами Web является SOAP. Эта технология широко обсуждалась в прессе, особенно с тех пор, как компания Microsoft решила принять ее для использования на платформе .NET. Теперь волнение, кажется, слегка успокоилось, так как спецификация SOAP была завершена. Если подумать, то знание того, как точно работает SOAP, похоже на знание того, как работает HTTP, в принципе это интересно, но не существенно. Большую часть времени нам нет необходимости беспокоиться о формате сделанного со службами Web обмена, он просто происходит, а мы получаем требуемый результат, и все довольны.
По этой причине здесь не будет представлено подробное рассмотрение, но будет показано несколько простых запросов и ответов SOAP, чтобы можно было получить некоторое представление о том, что происходит за сценой.
Давайте предположим, что необходимо вызвать метод службы Web, имеющий следующую сигнатуру.
int DoSomething(String stringParam, int intParam)
Далее представлены требуемые для этого заголовки SOAP и body. Вверху указан адрес службы Web (об этом больше будет сказано далее):
POST /SomeLocation/myWebService.asmx HTTP/1.1
Host: karlivaio
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/DoSomething"
<?xml version="1.0"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope">
<soap:Body>
<DoSomething xmlns="http://tempuri.org/">
<stringParam>string</stringParam>
<intParam>int</intParam>
</DoSomething>
</soap:Body>
</soap:Envelope>
Параметр length определяет здесь общую длину содержимого в байтах и будет меняться в зависимости от значений, посланных в параметрах string и int.
Используемое пространство имен soap определяет различные элементы, которые применяются для создания сообщения. При отправке этого кода через HTTP реальные посылаемые данные будут несколько другими. Например, можно было бы вызвать приведенный выше метод с помощью простого метода GET:
GET /PCSWebSrv1/Service1.asmx/AddEvent?stringParam=string&intParam= int HTTP/1.1 Host.: hostname
Ответ SOAP этого метода будет следующим:
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" ?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope">
<soap:Body>
<DoSomethingResponse xmlns="http://tempuri.org/">
<DoSomethingResult>int</DoSomethingResult>
</DoSomethingResponse>
</soap:Body>
</soap:Envelope>
где length снова изменяется согласно содержимому, в этом случае int.
И снова реальный ответ через HTTP может быть значительно проще, например:
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0"?>
<int xmlns="http://tempuri.org/">int</int>
Это совсем простой формат XML.
Как упоминалось в начале раздела, все это можно полностью игнорировать. Только при необходимости сделать что-то действительно необычное точный синтаксис становится важным, но такие случаи выходят за рамки этой книги.
WSDL
WSDL полностью описывает службы Web, доступные методы и различные способы вызова этих методов. Все детали этого опять же не так уж важны, но общее понимание будет полезно.
WSDL имеет синтаксис, полностью соответствующий XML, и определяет службы Web по доступным методам, типам данных, используемых этими методами, форматам сообщений запросов и ответов, посылаемых методам и из методов с помощью различных протоколов (чистый SOAP, HTTP GET и т.д.), и различным связываниям между упомянутыми выше элементами.
Возможно, что наиболее важной частью файла WSDL является раздел определения типов данных. Он использует схемы XML для описания формата обмена данными и их отношениями с помощью элементов XML.
Например, метод службы Web, использованной в качестве примера в последнем разделе:
int DoSomething(string stringParam, int intParam)
будет иметь типы, объявленные для запроса следующим образом:
<?xml version="1.0" ?>
<definitions xmlns:s="http://www.w3.org/2000/10/XMLSchema"
xmlns="http://schemas.xmlsoap.org/wsdl/"
... другие пространства имен ... >
<types>
<s:schema attributeFormDefault="qualified" elementFormDefault="qualified"
targetNamespace="http://tempuri.org/">
<s:import namespace="http://www.w3.org/2000/10/XMLSchema" />
<s:element name="DoSomething" >
<s:complexType>
<s:sequence>
<s:element name="stringParam" nullable="true" type="s:string" />
<s:element name="intParam" nullable="true" type="s:int" />
</s:sequence>
</s:complexType>