Пятница, 26.04.2024, 03:01
Приветствую Вас Гость | RSS

Лекции

Меню сайта
Форма входа
Категории раздела
ТАУ (Теория автоматического управления) [31]
лекции по ТАУ
Экология [151]
учебник
Бухгалтерский учет и налогообложение в строительстве [56]
Дементьев А.Ю. - Практическое пособие
Психология [104]
Пип
информатика [80]
с# Карли Ватсон
современные стулья [0]
новинки
Поиск

Главная » 2010 » Февраль » 11 » Web-службы
00:54
Web-службы
Web-службы
Возможно, термин "web-служба" вам уже встречался ранее, хотя вы можете
и не знать, что из себя представляют эти службы и каким образом они подстраи-
ваются под работу Паутины в настоящее время. Web-службы являются основой
нового поколения web-приложений. Что бы ни представляло из себя клиентское
приложение, будь это приложение Windows или приложение ASP.NET Web
Forms, и какая бы система ни использовалась на клиентской машине, например,
Windows, Pocket Windows или какая-либо другая, они будут постоянно взаимодей-
ствовать с Интернетом посредством web-службы. Web-службы напоминают ком-
поненты, с которыми мы познакомились в главе 21, за исключением того, что они
выполняются через Интернет. Это выполняющиеся на стороне сервера программы
ожидают прихода сообщений от клиентских приложений и возвращают им какую-
то специфическую информацию. Эта информация может исходить непосредственно
от самой web-службы, от других компонентов, находящихся в том же самом доме-
не, или от других web-служб. Хотя полная концепция web-служб и претерпела не-
которые изменения на протяжении того периода, пока писалась эта книга, на самом
деле, можно выделить несколько типов web-служб, которые предназначены для
выполнения различных функций: некоторые web-службы предоставляют инфор-
мацию о какой-то конкретной области, например, о производстве или здравоох-
ранении; существуют портальные службы, которые используют службы различных
провайдеров для предоставления информации по какой-либо конкретной теме;
есть службы, предназначенные для работы с каким-либо одним типом приложе-
ний, и отдельные составные части служб, которые могут использоваться многими
разнообразными приложениями.
Web-службы предоставляют возможность комбинировать, совместно использо-
вать, обмениваться или подключаться к отдельным службам различных производи-
телей и разработчиков с целью создания абсолютно новых служб или создаваемых
по заказу приложений, которые формируются в динамике для удовлетворения нужд
клиентов.
В настоящей главе будут рассматриваться следующие темы:
• Предшественники web-служб
• Что такое web-служба?
• Протоколы, используемые web-службами
• Создание web-службы ASP.NET >
• Тестирование web-служб
• Создание клиента ддя пользования web-службами
726 Глава 25
Мы не будем углубляться в детали внутреннего устройства web-служб, в осо-
бенности служб, работающих в форматах SOAP и WSDL, которые основываются
на использовании XML, однако вы сможете получить общее представление о том,
для чего эти протоколы используются. Прочитав эту главу, вы сможете приступить
к созданию и использованию простых web-служб с помощью Visual Studio.NET.
До того как появились web-службы
Объединение компьютеров для обмена данными представлялось важной кон-
цепцией уже 1969 г., когда из четырех компьютеров, соединенных телефонной
линией, была создана первая сеть ARPANET. В 1976 г. был разработан протокол
TCP/IP. Для упрощения этого протокола в университете Беркли была создана мо-
дель разъема для сетевого программирования.
При программировании с использованием Sockets API клиент должен был ини-
циировать установление соединения с сервером, после чего он получал возмож-
ность отправлять и принимать данные. Чтобы добиться выполнения на сервере
каких-либо операций и получить некоторые результаты, требуются дополнитель-
ные протоколы, необходимые для описания кодов запросов и ответов. Примерами
подобных так называемых "протоколов приложений" могут служить FTP, Telnet
и HTTP. Протокол FTP используется для получения от сервера и отправки на сер-
вер различных файлов. Протокол FTP поддерживает коды запросов GET и PUT,
которые пересылаются по соединению от клиента к серверу. Сервер анализирует
поток получаемой информации и в соответствии с кодами полученных запросов
вызывает соответствующие методы. Протокол HTTP работает практически так же,
как и FTP (см. главу 23).
Вызов удаленной процедуры
Используя Sockets API и протокол TCP/IP для вызова методов на сервере,
программисту пришлось бы создавать средства, с помощью которых сервер мог бы
анализировать поток данных и вызывать соответствующий метод. Для упрощения
ситуации целым рядом компаний был создан протокол RPC (Remote Procedure
Calls — вызов удаленных процедур), одна из разновидностей которого до сих пор
весьма популярна. Речь идет о протоколе DCE-RPC (Distributed Computer Environment
— Remote Procedure Calls, распределенная компьютерная среда — вызов
удаленных процедур), созданном компанией Open Software Foundation, которая
позднее была преобразована в Open Group (см. www.opengroup.org). При исполь-
зовании RPC мы определяем методы в формате IDL (Interface Definition Language —
язык описания интерфейсов), которые должны быть выполнены сервером и кото-
рые могут быть вызваны клиентом. Эта работа выполняется специальной програм-
мой, которая называется "заглушкой" (stub) и генерируется компилятором
интерфейса.
RPC предназначается для вызова методов, а это означает, что вам придется за-
ниматься процедурным программированием. Технология RPC появилась относите-
льно поздно, когда большинство разработчиков начали работать с парадигмой
объектно-ориентированного программирования. Чтобы заполнить этот технологи-
ческий пробел, было создано несколько различных технологий, включая CORBA
и DCOM-.
Web-службы 727
CORBA
Компания Object Management Group (OMG, www.omg.org) выступила инициа-
тором создания CORBA (Common Object Request Broker Architecture — Единая
архитектура брокера объектных запросов) в 1991 г. для придания "объектной ори-
ентированности" сетевому программированию. Многие компании, такие как Digital
Equipment, HP, IBM и др., разработали CORBA-серверы. Но поскольку компа-
нией 0MG были определены не конкретные требования по реализации, а только
спецификации, то серверы различных фирм реально оказались несовместимыми.
Серверу HP требовался клиент HP, серверу IBM был необходим клиент IBM и т. д.
DCOM
Совместно с Windows NT 4, компания Microsoft стала распространять протокол
DCE-RPC с возможностями объектно-ориентированного программирования. Про-
токол DCOM (Distributed COM — распределенный СОМ) сделал возможным вы-
зов СОМ-компонентов по сети; он используется в приложениях С0М+. После
нескольких лет, на протяжении которых обязательным требованием для использо-
вания DC0M являлось применение операционных систем Microsoft, эта компания
сделала свой протокол открытым для других посредством The Active Group (актив-
ная группа). DCOM стал доступен для Unix, VMS и операционных систем IBM.
DCOM интенсивно использовался в различных средах компании Microsoft, однако
попытка перенести его на другие системы по большому счету успеха не имела.
Вряд ли администратор мейнфрейма IBM захочет включать в свою систему техно-
логию компании Microsoft.
RMI
Компания Sun выбрал-а свой путь с использованием собственных Java-техноло-
гий. В чистой Java-среде протокол RMI (Remote Method Invokation — вызов уда-
ленных методов) использовался для вызова удаленных объектов. Компанией Sun
были созданы определенные мосты для связи с CORBA и СОМ, но основной зада-
чей компании было добиться массового использования решений, основанных толь-
ко на Java.
SOAP
Все технологии, с которыми мы сталкивались до сих пор, использовались для
взаимодействия между приложениями. Но если у вас есть решения на CORBA,
DCOM и RMI, то очень сложно заставить их обмениваться информацией между
собой. Другой недостаток, присущий этим технологиям, заключается в том, что их
архитектура не позволяет достичь масштабируемости при тысячах клиентов, что
является обязательным требованием для Интернет-решений.
По этой причине несколько компаний, включая Microsoft и UserLand Software
(www.userland.com), создали в 1999 г. SOAP (Simple Object Access Protocol —
простой протокол доступа к объектам) как совершенно новый и абсолютно нова-
торский способ вызова объектов через Интернет, который строится на уже приня-
тых стандартных протоколах. В SOAP для описания методов, подлежащих
удаленным вызовам через сеть, и их параметров используется формат, основанный
на XML. SOAP-сервер, работающий в среде СОМ, транслирует SOAP-сообщения
в СОМ-вызовы, а SOAP-сервер, работающий в среде CORBA, транслирует их
в CORBA-вызовы. Изначально для определения самого SOAP использовался про-
токол HTTP, поэтому SOAP-вызовы могут осуществляться через Интернет.
728 Глава 25
С появлением SOAP родился и термин "web-служба".
Спецификации W3C по SOAP 1.1 можно найти по адресу
www. w3. org/TR/SOAPA
В современном мире каждое приложение, которое предоставляет какие-либо
услуги, является web-службой. Нет никакой необходимости, чтобы web-службой
в качестве формата для сообщений обязательно использовался бы протокол
SOAP, а для а для обмена информацией между клиентом и сервером — протокол
HTTP; вместо них могут применяться другие протоколы. В спецификациях
SOAP 1.0 использование HTTP выступало как обязательное требование, однако
в версию 1.1 были внесены изменения, которые позволяют применять и другие
транспортные протоколы. Несмотря на это, при использовании web-служб через
Интернет протоколы SOAP и HTTP являются основными. С появлением .NET
Remoting стало возможным создавать web-службы, которые используют сообще-
ния в двоичном формате и ТСР-соединение.
В настоящей главе основное внимание будет сосредоточено на web-службах,
которые могут быть созданы с использованием Visual Studio.NET Project Wizard
(мастера проектов Visual Studio.NET), который, в свою очередь, использует .NET
Remoting, SOAP и HTTP.
Где находят применение web-службы
Чтобы взглянуть на web-службы под другим углом зрения, мы разделим их на
обеспечивающие взаимодействие пользователь—приложение и на обеспечиваю-
щие взаимодействие приложение—приложение.
Начнем со взаимодействия пользователь—приложение и попробуем узнать из
Паутины информацию о погоде. В сети существует огромное количество сайтов
вроде http://www.msnbc.com и http://www.weather.com, в которых информация о по-
годе представлена в удобном для восприятия виде. Поэтому такие страницы обычно
читаются непосредственно пользователем.
Если же мы хотим создать клиентское приложение с большими возможностями
(взаимодействие приложение—приложение) для вывода информации о погоде, то
нашему приложению будет необходимо установить соединение с соответствующим
web-сайтом посредством URL-строки, в которой бы содержалось название города,
погоду в котором мы хотим узнать. После этого нам пришлось бы проанализиро-
вать полученное в результате HTML-сообщение, пришедшее от web-сайта, для того
чтобы получить значения температуры и других погодных условий, после чего мы
смогли бы, наконец, вывести эту информацию в удобном формате клиентскому
приложению с большими возможностями.
Это довольно большая работа особенно потому, что требуется получить по не-
сколько температурных сводок для каждого конкретного города. Более того, про-
цесс извлечения данных из HTML оказывается совсем не тривиальным. Ситуация
складывается так потому, что HTML-данные обладают структурой, пригодной для
вывода в web-браузере, и не предназначены для использования каким-либо бизнес-
приложением со стороны клиента. Соответственно, все данные оказываются
встроенными в текст, и извлечь их оказывается не так просто. Вам придется пере-
писывать заново или подстраивать клиентское приложение так, чтобы оно было
в состоянии извлекать разнородную информацию (например, о ливне) с одной и той
же web-страницы. Напротив, при использовании web-браузера пользователи обла-
дают возможностью немедленно получить интересующие их данные.
Web-службы 729
Чтобы избавиться от проблем с обработкой HTML-данных, web-служба может
предоставлять некоторые полезные средства, которые возвращают только запро-
шенные данные. Надо просто вызвать метод на удаленном сервере и получить
необходимую информацию, которая может непосредственно использоваться клиент-
ским приложением. Ни на каком этапе не приходится иметь дела с предварительно
отформатированным текстом, предназначенным для пользовательского интерфейса,
поскольку web-служба предоставляет информацию в XML-формате, а инструменты
для обработки XML-данных давно разработаны. Все, что требуется от клиентского
приложения,— это вызвать некоторые методы XML-классов .NET Framework, ко-
торые позволяют получить требуемую информацию. Если мы пишем программу-
клиент для web-службы .NET на С#, то вообще не нужно писать для этого ника-
кого кода, поскольку существуют инструменты, которые создадут код на С# за нас!
Приложение для сообщений о погоде является только одним из возможных
применений web-служб. Кроме него существует огромное множество других.
Сценарий приложения для организации путешествий
Как вы организуете свой отдых в праздничные дни? Вы идете в бюро путешест-
вий, которое выполняет вместо вас всю необходимую работу. А организовывали ли
вы когда-нибудь свой отдых через Интернет? На web-сайте авиакомпании вы мо-
жете ознакомиться с расписанием полетов и купить подходящий билет. Программа
поиска по web-сайтам может быть использована для выбора отеля в соответствую-
щем городе. Возможно, вам повезет, и вы сумеете найти карту города, на которой
будет указана дорога к выбранному отелю. Отыскав страничку отеля, вы можете
перейти к форме, посредством которой осуществляется бронирование мест. После
этого вы получаете возможность перейти к поиску фирмы, осуществляющей про-
кат автомобилей...
Большая часть работы, которую вам пришлось выполнять, заключалась в поис-
ке нужных web-сайтов с помощью программ поиска и в определении путей, по
которым к этим сайтам можно добраться. Вместо этого мы могли бы создать
приложение для организации путешествий, которое использовало бы различные
web-службы, содержащие подробную информацию об отелях, воздушном сообще-
нии, компаниям по прокату автомобилей и т. д. и представляло бы клиенту про-
стой в использовании интерфейс, который позволял бы ему решать все проблемы,
связанные с проведением отдыха, включая музыкальное напоминание о предвари-
тельном заказе. Используя свой карманный PC в месте проведения отдыха, поль-
зователь мог бы использовать ту же самую web-службу для получения карты места
отдыха, для получения актуальной информации о программах кинотеатров и т. д.
Сценарий приложения дистрибьютера книжной продукции
Web-службы могут также оказаться полезными для двух компаний, связанных
между собой некоторыми партнерскими отношениями. Предположим, что дистри-
бьютер книжной продукции заинтересован в распространении информации по
книжным магазинам об имеющихся у него на складе книгам. Это может быть реа-
лизовано в виде web-службы. Можно создать специальное приложение ASP.NET,
использующее такую web-службу, которое предлагало бы пользователям непо-
средственный доступ к этой web-службе. Другое клиентское приложение такой
web-службы могло бы представлять собой приложение Windows для книжного ма-
газина, которое сначала осуществляет ревизию своих складов, а затем проверяет
наличие книг на складе дистрибутора. Продавец может дать немедленный ответ
относительно дат поставок без необходимости проверять какие-либо склады с по-
мощью других приложений.
730 Глава 25
Устройства
Браузеры
Типы клиентских приложений
Клиентом web-службы может быть либо приложение Windows, созданное с ис-
пользованием Windows Forms, либо приложение ASP.NET, созданное с использо-
ванием Web Forms. Стать потребителем web-службы (использовать ее) могут
Windows PC, система Unix или карманный PC. При использовании .NET Framework
web-службы могут использоваться любым типом приложений: Windows Forms,
Web Forms или консольным приложением.
Архитектура приложения
Каким образом должно выглядеть приложение, которое является потребителем
web-службы? Независимо от того, разрабатываете ли вы приложение ASP.NET,
приложение Windows или приложение для малых устройств, web-службы оказыва-
ются важной технологией для всех типов приложений.
На рисунке слева изображен
сценарий возможного использова-
ния web-служб. Различные устрой-
ства и браузеры соединены через
Интернет с приложением ASP.NET,
которое разработано с применением
Web Forms. Приложение ASP.NET
использует определенные локальные
web-службы, а также те удаленные
web-службы, доступ к которым мо-
жет быть осуществлен через сеть:
портальные web-службы, web-
службы конкретного приложения
и составные web-службы. Следую-
щий перечень поможет разобрать-
ся в предназначении каждого из
этих типов служб:
Web-службы
отдельных
приложений
Составные
элементы
web-служб
• Граница Интернета
• Портальные web-службы предлагают услуги от различных компаний,
занимающихся одним и тем же. Это простая в использовании
единая точка доступа к нескольким службам.
• Web-службы конкретного приложения создаются
для использования единственным приложением.
• Составные части web-служб представляют собой службы, которые
с легкостью могут быть использованы многими приложениями.
Разработка Hailstorm компании Microsoft предлагает
большое количество подобных услуг, например,
сохранение конфигурации приложения
или аутентификацию пользователей.
Приложение Windows, изображенное на рисунке, может использовать web-
службы напрямую, минуя приложение ASP.NET.
Web-службы 731
Архитектура web-служб
Клиент
web-службы
Поиск web-службы
http://www.uddi.org
Привязка к документам DISCO или WSDL
Обнаружение
http://myservice.com/default.vsdisco
Привязка к документу WSDL
Какие методы можно вызвать?
http://myservice.com/myservice/myservicei..wwssddll J ^ >
Описание web-службы
Вызов метода
http://myservice.com/myservice/myservice.wsdl
Тело SOAP
UDDI
Web-служба
Если мы планируем воспользовать-
ся уже существующей web-службой,
то нам необходимо найти web-служ-
бу, которая удовлетворяет нашим
требованиям. Если у нас есть инфор-
мация о существовании подходящей
web-службы, то нам потребуется ин-
формация о том, как можно к ней
обратиться. Основные механизмы
вызова web-служб изображены на
рисунке справа.
• Прежде всего необходимо
найти web-службу,
уже зарегистрированную
в службе директории
регистрации, которая
возвращает информацию,
необходимую для привязки
к Web-службе.
• Следующее действие — обнаружение. Если известен сервер,
на котором располагается web-служба, то можно затребовать у сервера
описание этой web-службы, для чего используется протокол обнаружения
(DISCO).
• Описание службы представляется на языке Web Services Description
Language (WSDL — язык описания web-служб). В таком описании
содержится информация о.том, какими методами располагает web-служба
и какие типы аргументов им необходимо передавать. При использовании
службы, которая не поддерживает обнаружение и не регистрируется
в директории UDDI, все, что мы получим,— это документ WSDL.
• Располагая описанием web-службы, мы обладаем информацией о том,
какие методы можно вызвать. Методы будут вызываться с помощью
SOAP, поэтому все обращения к методам, включая все аргументы,
должны быть преобразованы в соответствии с протоколом SOAP.
Как SOAP, так и WSDL описываются
посредством XML-грамматики.
Рассмотрим подробнее каждый из этих последовательных шагов.
Программа поиска для web-служб
Существует определенная вероятность того, что вы сможете воспользоваться
web-службой, которая уже поддерживается некоторой другой компанией. Для того
чтобы иметь возможность осуществлять поиск и находить заранее существующие
web-службы, компании Microsoft, IBM и Ariba объединились и организовали web-
сайт www.uddi.org, на котором располагается служба UDDI (Uniform Description,
Discovery and- Integration — единое описание, обнаружение и объединение).
732 Глава 25
Continents С Airlines has the
Служба UDDI является не зависящей от используемой платформы открытой сис-
темой для описания служб, обнаружения коммерческих объектов и объединения
коммерческих служб с помощью Паутины, и, кроме того, она выполняет функции
рабочего реестра. Любая компания, которая желает объявить о своей службе, мо-
жет ее здесь зарегистрировать. С помощью коммерческого реестра UDDI и UDDI
API можно заносить информацию о web-службах программным путем.
После инициализации проекта UDDI тремя компаниями его поддерживают бо-
лее 220 компаний. Среди них Boeing, ВТ, Compaq, DataChannel, Dell, Fujitsu, HP,
Hitachi, KPMG Consulting, Merrill Lynch, Nortel Networks, Oracle, Rational, SAP,
Sun Microsystems, VeriSign и многие другие.
Для выявления уже существующей web-службы, можно осуществить поиск по
коммерческому имени или путем просмотра, воспользовавшись одной из следую-
щих категорий: промышленная классификация, географическая классификация
ISO 3166 или географическая классификация компании Microsoft. После успешно-
го завершения поиска службы, вы получаете описание этой web-службы; полную
информацию, касающуюся классификации этой web-службы, где описываются груп-
пы, к которым она принадлежит; информацию о привязке, куда включается файл
обнаружения (DISCO) и, возможно, документ WSDL.
В Visual Studio.NET поиск по сайту UDDI компании Microsoft может быть осу-
ществлен с помощью меню Project | Add Web Reference.
Кроме Microsoft UDDI Directory существует еще Test Microsoft UDDI Directory.
На период разработки собственной web-службы вы можете зарегистрировать вашу
службу в тестовой директории, вторую директорию следует использовать только
для отлаженных активных служб.
Если мы войдем в Microsoft
UDDI Directory, то сможем зада-
вать строки, по которым будет вес-
тись поиск зарегистрированных
web-служб. Если же в результате
такого поиска будет получена ин-
формация о привязке, то можно
включить ссылку на web-службу
с помощью кнопки Add Reference.
ЕСЛИ Задать Строку Continental,
то будет выведена web-служба
компании Continental Airlines —
Continental Flight Status, как пока-
зано на рисунке слева.
A U
£ web services, Q Wet» References went kurd on th*
J
На момент написания этой книги на сайте UDDI компании
Microsoft было зарегистрировано не так уж много web-служб,
а у многих из зарегистрированных были нефункционирующие
ссылки. Эта ситуация, скорее всего, изменится с появлением
Visual Studio.NET.
Большое количество web-служб можно найти на страницах
www.xmethods.net и www.gotdotnet.com.
Обнаружение web-служб
Если вы знаете, что некий сервер поддерживает web-службы, то для получения
информации о том, какие именно web-службы им поддерживаются, следует ис-
пользовать процедуру обнаружения. Для хранения этой информации web-сервер
использует файл с расширением vsdisco.
Web-службы 733
В файле vsdisco определяются правила, которыми сервер руководствуется при
поиске web-служб. С помощью этого файла определяется, что службы должны ра-
зыскиваться либо динамически с исключением некоторых директорий, либо стати-
чески с указанием директорий, в которых должен осуществляться поиск.
Запросив с помощью браузера
файл Default.vsdisco, МОЖНО ПО-
лучить ссылки на остальные файлы
с расширением vsdisco, содержа-
щиеся В элементе discoveryRef.
ОДИН ИЗ Элементов
содержит ссылку на http://localhost/
WebServiceSample/WebService-
Sample.vsdisco. Мы воспользуемся
этой ссылкой для получения до-
полнительной информации об этой
службе (см. рис. справа).
• : , , ! . , . . - . . • .- , , « . , , •.,!! Г."
^В«к -
~ < d i s c o v
< d t $ c
« f i s c o v e r y f t e f
< d i s c o
ref^ahttp://localhost/WebSe»'vicel/V/ebSQrvicel.vsdiscoV>
ttp://lacaihost/SimpleServicei/SimplsServicel.vsdisco1' />
fef~'ihttp://loc<3i!host/WebServiceSample/WebServiceSampte.vsdisco'< />
^ B a c k - •* - 4 Э [ v j t^5 ( £ Persona! Ваг £|Favw*es -J J\- £> Ш \2Ш
A J i ^ s i £ ] ; ; ;. - . a - v •A.-bLc'vi.-'jf 7 . .>,-»,« S'.r,,.' Г i A-.« «;-, >„<

- <discov3ry xmin$x«ht
< c o n t r a c t R e f r e f = * h p p
d o c R e f = M h t t p : / / l o c a t h o s t / W e b S e i * v i c e S a m p l e / S e r v i c e l . a s m x f l
x m l n s ^ a h t t p : / / s c h e m c i s . x m l s a a p . o r g / c 1 i s c o / s c l / a ' / >
< / d i s c o v e r y >
Если в адресное окно браузера
ввести адрес http://localhost/Web-
ServiceSample/WebService-
Sample.vsdisco, то браузер вернет
ссылку на WSDL-информацию от-
носительно данной службы с по-
мощью Элемента <contractRef>:
h 11 p: / /1 o cal host/We bService-
Sample/Service1.asmx?wsdl, как по-
казано на рисунке слева.
Использовать браузер для чтения информации совершенно не обязательно. Ин-
формация для обнаружения может использоваться непосредственно инструмента-
ми Visual Studio.NET: в диалоге Add Web Reference вы можете обнаружить
гиперссылку Web References on Local Web Server, где располагается информация
локального сервера, которая используется при поиске web-служб. Также есть воз-
можность ввести адрес web-службы в окно редактирования Address.
Какие методы можно вызвать?
Документ, составленный на
языке описания web-служб (Web
Services Description Language,
WSDL), содержит в себе всю ин-
формацию о методах, которые под-
держиваются данной web-службой,
и о том, как они могут быть вызва-
ны: типы параметров, передаваемых
Web-службе, и типы возвращае-
мых web-службой значений.
Воспользовавшись элементом
<contractRef> И ССЫЛКОЙ, ПОЛучен-
ной в результате процесса обнару-
жения, можно просмотреть WSDL-
документ в браузере, как показано
на рисунке справа.
'
хт ins J t ш к *:ht t, | i : / / m icro so it »c« m / w J» d I / m l rue / t « xtMet chin g /*
Mm ins: s о &p ~ *ht tp: / / s ch о m <>s. x rn 1 s а ар .о r tj / vt s d J / so ар / *
кап iris! so ip e#n с •« "In i t p; / /s ch iftffi tts«xmis w i p. о rg / se **p /*J n со dSnp/*
xmins: $O«*bttpV/temptiri.org/" I J i y l N j i l i l l f i p10m*MtpVAtWfwyf .org/*
Mnfr» »*ht t: p: / / scb e ma s. xmlsoa p. o r g / w s d I /* >
j
<s:
»* b t t p : / / t e m pu rl. o r g / " >
< i r i < '
=19quallfJed*
•- < s: с о т pie кТур е >
<s: element minOccurs~"ls oiaxOccurs-*l* nama^message"
- <s:element name^RevQrseStringResponse*>
- < *5: с о т pltxTyp a >
'! i ! Ш
734 Глава 25
Нет никакой необходимости работать с этой информацией непосредственно.
WSDL-документ будет сгенерирован динамически с атрибутом webMethod; к рас-
смотрению названного атрибута мы приступим ниже в этой главе. Добавление
Web Reference с помощью Visual Studio.NET на стороне клиента позволяет не
только получить информацию для обнаружения web-служб, которые поддержива-
ются данным сервером, но и запросить WSDL-документ. Этот WSDL-документ,
в свою очередь, используется для создания клиентского посредника, обладающего
теми же самыми методами и аргументами. Использование такого посредника кли-
ентским приложением обладает тем преимуществом, что теперь у приложения есть
возможность вызывать все методы так, как если бы они были реализованы на сер-
вере, поскольку посредник принимает на себя выполнение преобразования этих
вызовов в SOAP-вызовы и обращение к методам по сети.
Спецификации поддерживаются консорциумом World Wide Web Consortium
(W3C). С этими спецификациями можно ознакомиться на web-сайте W3C:
www.w3.org/TR/wsdl.
Вызов метода
SOAP-сообщение
SOAP-конверт
SOAP-заголовок
SOAP-тело
Для вызова метода web-службы необходимо преобразовать обра-
щение к методу в SOAP-сообщение в соответствии с описанием, со-
держащимся в WSDL-документе. На рисунке слева представлены
составные части SOAP-сообщения. Это сообщение состоит из SOAP-
конверта, который объединяет всю SOAP-информацию в общий блок.
Сам конверт состоит из двух частей — SOAP-заголовка и SOAP-тела.
Заголовок является необязательным и позволяет описывать, каким
образом клиент и сервер должны обрабатывать тело сообщения. Тело
является обязательным и состоит из блоков вызываемых методов.
В SOAP-теле клиент кроме собственно вызова метода посылает сериа-
лизованные значения всех необходимых методу аргументов. SOAP-
сервер отправляет обратно возвращаемые значения в теле ответного
SOAP-сообщения (см. рис. слева).
В следующем примере демонстрируется, каким образом выглядит
SOAP-сообщение, которое посылается от клиента серверу. Клиент
вызывает метод web-службы ReversestringO. В качестве аргумента
этому методу передается строка Hello world!. Заметьте, что обращение к методу
находится в теле SOAP-сообщения, внутри XML-элемента <soap:Body>. Само тело
находится внутри конверта: <soap:Envelopes Перед самим SOAP-сообщением
присутствует HTTP-заголовок, поскольку SOAP-сообщение отправляется в виде
запроса HTTP POST.
Нет необходимости создавать это сообщение, поскольку оно автоматически
генерируется клиентским посредником:
POST /WebServiceSample/Servicel.asmx HTTP/1.1
Host: localhost
Content-Type: text/xml; charset=utf-8
Content-Length: 508
SOAPAction: *http://www.wrox.com/webservice/ReverseString*

<soap:Envelope xmlns:xsi="http: //www.w3 .org/2001/XMLSchema-instancell>
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
Web-службы 735
<ReverseString xmlns=1Ihttp: //www. wrox.com/webservice">
<message>He!lo World!</message>
</ReverseString>
</soap:Body>
</soap:Envelope>
В ответ на обращение сервер отправляет назад SOAP-сообщение с результатом
JdlroW olleH, КОТОРЫЙ МОЖНО обнаружить В XML-ЭЛементе ReverseStringResult:
НТТР/1.1 200 ОК
Content-Type: text/xml; charset=utf-8
Content-Length: 446

<soap: Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/•>
<soap:Body>
<ReverseStr ingResponse xmlns="http: //www.wrox.com/webservice">
<ReverseStringResult>/dl2"oJV oIleH</ReverseStringResult>
: </ReverseStringResponse>
</soap:Body>
</soap:Envelope>
Спецификации SOAP поддерживаются Рабочей группой по протоколу XML
компании W3C (при необходимости обращайтесь на сайт www.w3.org/TR/soap
и www.w3.org/TR//2001/WD-soap12-20010709 за версией 1.2).
SOAP и межсетевые экраны
Системные администраторы часто задают вопрос, позволяет ли протокол SOAP
преодолевать границы обеспечения безопасности межсетевой защиты или, други-
ми словами, нарушает ли SOAP концепцию межсетевых экранов? На самом деле,
в данном случае возникают те же самые проблемы, связанные с обеспечением
безопасности, что и для обычных web-серверов. При работе с обычным сервером
администратор межсетевого экрана открывает порт HTTP 80, позволяя серверу
взаимодействовать через него с внешним миром. Пользователи, находящиеся
в Интернете, получают возможность прямого доступа к этим серверам, несмотря
на то, что они находятся за стеной межсетевого экрана. Пользователь может от-
править серверу HTML-файл с HTTP-запросом, а сервер — в качестве ответа —
может отправить либо статическую страницу, либо страницу, которая была созда-
на динамически посредством ASP- или CGI-сценариев. Web-службы — это всего
лишь еще один тип приложения, выполняющегося на стороне сервера, которое для
взаимодействия использует HTTP, хотя вместо того, чтобы отправлять и прини-
мать простые запросы HTTP GET и HTTP POST, оно принимает запрос HTTP
POST, где содержится встроенное SOAP-сообщение, а вместо того, чтобы возвра-
щать HTML, оно возвращает HTTP-ответ с встроенным ответным SOAP-сообще-
нием. Что касается межсетевого экрана, то все взаимодействие осуществляется
посредством HTTP, следовательно, оно может проходить через порт 80.
Если web-служба работает не совсем так, как требуется, например, не обеспе-
чивает сохранность конфиденциальной информации или нарушает нормальную
работу сервера, то это приведет к возникновению определенных проблем, однако
такие проблемы являются совершенно обычными для любых приложений, выпол-
няющихся на стороне сервера, будь то традиционные web-страницы, серверные
коммерческие объекты или web-службы.
736 Глава 25
Если системный администратор межсетевого экрана все равно опасается ненад-
лежащей организации безопасности web-служб, то он может воспользоваться фильт-
ром приложений, чтобы запретить SOAP-вызОвы в HTTP-запросах.
Web-службы и .NET Framework
.NET Framework существенно облегчает создание и использование web-служб.
Ниже перечислены четыре основные пространства имен, предназначенные для ра-
боты с web-службами:
• Классы, Описанные В пространстве имен System.Web.Services,
используются при создании web-служб.
• При ПОМОЩИ пространства имен System.Web.Services.Description
есть возможность описывать web-службы посредством WSDL.
• При обнаружении web-служб с использованием протокола DISCO
применяются КЛаССЫ ИЗ пространства имен System.Web.Services.Discovery.
• С ПОМОЩЬЮ Пространства имен System.Web.Services.Protocols
можно создавать SOAP-запросы и ответы.
Ниже мы рассмотрим использование всего лишь двух
пространств имен — System.Web.Services.Description
и system.web.services.Discovery. Остальные два пространства
имен мы только затронем в этой главе. Более подробная
информация может быть найдена в книге "ASP.NET Programmer's
Reference" (Руководство программиста по ASP.NET),
ISBN 186100530Х, выпущенной издательством WROX.
Создание web-службы
Для реализации web-службы можно создать класс web-службы, который явля-
ется ПРОИЗВОДНЫМ ОТ Пространства имен System.Web.Services.WebService. Класс
WebService обеспечивает ДОСТуп К Объектам ASP.NET Application И Session:
Свойство WebService Описание
Application Получает объект HttpApplicationState для текущего запроса.
Context Получает объект HttpContext, в котором заключена информация,
. относящаяся к HTTP. С помощью этого объекта может быть прочитана
информация в HTTP-заголовке.
Server Получает объект HttpServerutility. Этот класс обладает несколькими
вспомогательными методами, которые позволяют зашифровывать
и расшифровывать URL.
Session , Получает объект HttpSessionState, который используется для сохранения
некоторого состояния клиента.
User Получает пользовательский объект, реализующий интерфейс iPrincipal.
С помощью данного интерфейса есть возможность узнать имя пользователя
и тип аутентификации.
Web-службы 737
Атрибут WebService
Подкласс класса WebService ДОЛЖен быть помечен атрибутом WebService.
Класс webServiceAttribute обладает следующими свойствами:
Свойство Описание
Description Описание web-службы, которое будет использовано в WSDL-документе.
Name Позволяет считывать или задавать название web-службы.
Namespace Позволяет считывать или задавать пространство имен XML для данной web-службы.
По умолчанию используется значение h t t p : / / t e m p u r i . o r g , которое вполне подходит
для нужд тестирования, однако перед тем как сделать службу общедоступной,
это пространство имен должны быть изменено.
Мы познакомились с атрибутами в главе 22.
Здесь снова можно увидеть атрибуты в действии.
Атрибут WebMethod
Все методы, предоставляемые web-службой, должны быть помечены атрибутом
WebMethod. Web-служба может обладать и методами, которые не помечаются атри-
бутом WebMethod. Такие методы могут вызываться из web-методов, но при этом они
не могут быть вызваны клиентом. Вызывать метод удаленным клиентам позволяет
использование атрибута класса webMethodAttribute, при этом можно определять,
должна ли осуществляться буферизация ответов, какова допустимая длина кэша
и должно ли сохраняться состояние сеанса в виде именованных параметров. В сле-
дующей таблице перечислены свойства класса WebMethodAttribute.
Свойство Описание
BufferResponse
CacheDuration
Description
EnableSession
MessageName
TransacionOption
Позволяет устанавливать или сбрасывать флажок, указывающий на необходимость
буферизации ответа. Значение по умолчанию — true. При сохранении ответа
в буфере пользователю будет отправляться только полностью завершенный пакет.
Позволяет устанавливаться интервал времени, на протяжении которого результат
будет храниться в кэше. Если тот же самый запрос будет повторен в течение
определяемого данным свойством промежутка времени, то будет возвращаться
ответ, хранящийся в кэше. По умолчанию значение данного свойства равно О,
что означает, что результат вообще не кэшируется.
Содержит описание, которое используется для создания help-страниц web-службы
для будущих потребителей.
Логическое значение, определяющее, является ли доступным состояние сеанса.
По умолчанию равно false; это означает, что свойство Session класса
WebService не может быть использовано для сохранения состояния сеанса.
По умолчанию имени сообщения присваивается название метода.
Определяет, каким образом данный метод работает с транзакциями.
По умолчанию используется значение Disabled.
Клиент
Чтобы вызвать метод, клиенту необходимо создать TCP-соединение с сервером
web-службы и отправить HTTP-запрос для передачи SOAP-сообщения. При этом
сам вызов метода должен быть преобразован в SOAP-сообщение. Все эти действия
выполняет посредник на стороне клиента. Посредник на стороне клиента реализо-
ван В классе SoapHttpClientProtocol.
738 Глава 25
Класс SoapHttpciientProtocoi
Класс System.Web.Services.Protocols.SoapHttpciientProtocoi ЯВЛЯ6ТСЯ 6a30-
вым классом для клиентского посредника. Метод invoke о позволяет привести
аргументы к виду, необходимому~для создания SOAP-сообщения, которое будет
отправлено web-службе. То, какая именно служба будет вызвана, определяется
свойством uri.
Класс SoapHttpciientProtocoi также поддерживает вызов web-служб в асинх-
ронном режиме С ПОМОЩЬЮ методов Beginlnvoke () И Endlnvoke () .
Альтернативные клиентские протоколы
Помимо класса SoapHttpciientProtocoi могут также использоваться и другие
КЛаССЫ-посредники. Протоколы HttpGetClientProtocol И HttpPostClientProtocol
позволяют отправлять простые запросы HTTP GET и HTTP POST, не несущие
дополнительной нагрузки в виде SOAP-вызова.
Классы HttpGetClientProtocol U HttpPostClientProtocol
могут применяться только тогда, когда в вашем решении
используется .NET как со стороны клиента, так и со стороны
сервера. Если вы хотите поддерживать различные технологии,
то вам следует использовать протокол SOAP.
Сравните запрос HTTP POST, приведенный ниже, с SOAP-вызовом, встретив-
шимся в этой главе ранее:
POST /WebServiceSample/Servicel.asmx/ReverseString HTTP/1,1
Host: localhost
Content-Type: application/x-www-form-urlencoded
Content-Length: length
• С : ^ Ш ' - ' , } / - . , • m e s s a g e ^ s t r i n g • ... . . . . •" • • • .. .'
Категория: информатика | Просмотров: 2901 | Добавил: basic | Рейтинг: 5.0/1
Всего комментариев: 5
5 Подарочные наборы от “Кафе подарков  
0
Сегодня наступило такое время, когда человека не удивить каким-то подарком, поэтому многим приходится что-то придумывать, дабы сделать приятное своим родственникам, руководителям или сослуживцам. В нашем кафе есть все для того, чтобы подыскать более оптимальное решение образовавшейся трудной ситуации с поиском подарков для друзей. Необходимо сказать, что для того, чтобы сделать приятно, необязательно тратить массу денег, самое важное – это внимание, и чувства, с которыми подбирается и преподносится сюрприз.
http://cafepodarkov.ru/ - клубная одежда интернет магазин

Важным атрибутом любого подарка считается упаковка, в которой он преподносится, а ещё открытка, содержащая пожелания человеку, который празднает то либо иное торжество. Даже простая открытка, которая содержит самые искренние слова, приносит больше радости человеку, чем дорогущий, бесполезный, не несущий никакого смысла подарок.
http://cafepodarkov.ru/ - подарки на новый год видео

В «Кафе Подарков» можно подыскать сувениры и подарки со всех уголков Земли, абсолютно на любой вкус, из самых разных ценовых решений. Это могут быть как полезные вещи для интерьеров, такие как фотообои, стильная канцелярия, так и приятные безделушки, способные изменить имеющую в помещении обстановку, гардероб стильными и красивыми вещами.
http://cafepodarkov.ru/ - интернет магазин хорошей одежды

4 outweipestile  
0
На днях мне потребовалась юридическая помощь и я долго искал какой-нибудь юридический центр! После чего наткнулся на http://www.consalt-centr.ru - Юридический центр в пригороде Москвы
. посмотрел их веб сайт и оформил предложенную юридическую консультацию. По исходу этих событий юридическая информация дала о себе знать и я в результате решил свои проблемы личностного характера. Теперь восхваляю московский юридический центр консалт.

3 cleguange  
0
Мне недавно рекомендовали ссылку: http://srub-dizain.ru/price - цены на профилированный брус и комплектующие
и я надумал построить дом! Меня как раз интересовал толстый профилированный брус. В общем после этого я и попёрся к ним на производство! Там реально всё организовано сделано и профилированный брус камерной сушки трудно купить. Всему этому сопутствовала продуманная навигация ресурса, которую я струдом понял.Очень круто конечно то, что это завод изготовитель – но но свой сайт могли бы и лучше забабахать.

2 eSommeple  
0
Называется дожились! Вот в яху случайно зашёл на страничку http://rentrealtycrimea.com/dlitelno/page/5/ - сдам жилую недвижимость в Симферополе
и стал злым. Кстати забыл поздороваться! В общем сдам квартиру в Симферополе
,я узрел и до меня дошло, что жизнь уматовая штука – раз имеют место такие мастерские. Поэтому всем советую сайт http://rentrealtycrimea.com с Симферопольской недвижимостью.

1 Antropusx  
0
Да...дизайн явно надо было бы сменить:)
Тёмно-зелёный цвет отлично подошёл бы xD

Имя *:
Email *:
Код *:
Календарь
«  Февраль 2010  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

krutoto.ucoz.ru
Бесплатный конструктор сайтов - uCoz