![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Tamerlann |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 10.11.2002 Где: Минск, Беларусь Репутация: нет Всего: 2 |
Я в этой сфере сфере новичок, так что не обессудьте:
Что такое Web Services? Кокое отношение к этому имеет XML? --------------------
http://timursdev.blogspot.com/ |
|||
|
||||
stron |
|
|||
![]() Консультант ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1654 Регистрация: 17.7.2003 Где: Питер Репутация: 4 Всего: 36 |
Программа, выдающая не HTML-ку, а XML-ку
Webservice может предоставлять какие-нибудь услуги в Inete, напр., доступ к какой-нибудь эксклюзивной БД. ЗЫ: Чувствую, что скоро Kurt выдаст супер мега статью с примерами ![]() -------------------- подписи нет |
|||
|
||||
Tomcat |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 4.4.2003 Где: Гродно, Беларусь Репутация: 2 Всего: 2 |
Хех... У меня целых три курсовые по этой теме было написано.
В общем, изначально веб-сервисы задумывались, как средство организации межпрограммного вазимодействия или удаленного вызова процедур (RPC - Remote Procedure Call). Суть идеи RPC заключается в том, что одна запущенная программа может вызывать функции/процедуры другой программы, запущенной на этой же машине или на другой машине в сети. Позже к этой байде приплели объектный подход и получили Object RPC (ORPC). В основе веб-сервисов лежит протокол SOAP (Simple Object Access Protocol - Простой Протокол Доступа к Объектам). Года четыре назад ао всех статьях по поводу этого протокола, расматривались такие технологии, как CORBA, COM/DCOM, явовский RMI и пр. Все эти технологий так или иначе реализоввывали идею RPC. Но у них были ряд проблем в области глобальных сетей. Потому Мелкософтными с рядом других крупных контор была предложеня идея SOAP. SOAP является расширением протокола HTTP (хотя и это не факт! SOAP, как утверждалось, может быть реализован на любом текстовом протоколе. Но в основном используется HTTP, потому его и будем рассматривать). HTTP запрос/ответ делится на 2 части, заголовок и тело. В заголовке передается всякая информация о самом запросе/ответе, в теле непосредственно передаваемые данные (всякие параметры запроса, или возвращаемые данные ответа). Расширение SOAP заключается в том, что немного изменен заголовок, идентифицирующий этот запрос, как SOAP запрос, а в теле передается XML текст, описывающий, что запрашивается или что возвращается. Вот она и связь с XML. Потом от SOAPа перешли к идее Web-services. Чтобы проще, под веб-сервисом подразумевается предоставление определенных услуг web-узлом. Вот, например, услуга: складывание двух чисел ![]() И так, в веб-сервисах используется XML как формат передаваемых данных и SOAP, как протокол при помощи которого эти данные передаются. Кроме них, еще есть язык WSDL (Web Service Difinition Language), при помощи которого описываются сам сервис, то есть какие методы есть, какие параметры ему передаются, что он возвращает и пр. Есть еще UDDI (не помню, как расшифровывается), эта штука позволяет находить веб-сервисы в сети. Результатом всего сказаного, можно сказать: Web Services = XML + SOAP + WSDL + UDDI. Надо сказать, что мелкософтные в ASP.NET пошли немного дальше, и у них (хотя может быть и не только у них ![]()
Однажды, в одной книге по .NET прочитал, что веб-сервис - это объект предоставляемый методы, которые можно вызвать удаленно по сети Интернет. При поверхностном рассмотрении, это так. При создании веб-сервисов на ASP.NET, особенно с Visual Studio, этому утверждению и следуют. Создавать веб-сервисы на ASP.NET действительно очень легко. Примеры я давать не мастер. Тут и правда, Kurt может помочь. Это сообщение отредактировал(а) Tomcat - 17.11.2004, 11:18 |
|||
|
||||
Tamerlann |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 183 Регистрация: 10.11.2002 Где: Минск, Беларусь Репутация: нет Всего: 2 |
OK, кажется понял что-то. Большое спаибо.
Тогда, такие вопросы: 1. Т.е. если я хочу предоставлять кому-либо услуги по сложению двух чисел ![]() ![]() 2. А что, можно реализовывать пользовательскую часть и не отдельной программой, а предоставить возмжность доступа к сервису через браузер? Апплеты что-ли? 3. UDDI? получается в сети существуют общедоступные сервисы, которые можно использовать любой программе? 4. По поводу получаемой информации: получатся, что от сервиса я могу получить информацию только в XML? --------------------
http://timursdev.blogspot.com/ |
|||
|
||||
Kurt |
|
||||||||||||||||||||||||||||||
Увлеченный ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1662 Регистрация: 22.8.2003 Где: Краснодар Репутация: 20 Всего: 36 |
Опередили, блин. А я тут сижу строчу, хорошо, на форум догадался заглянуть ![]()
Угу. Через HTTP-POST и HTTP-GET можно передавать лишь: 1) строковые значения; 2) простые массивы (но НЕ пользовательский типов); 3) перечисления. Все. Остальное - тока через SOAP. Однако, этот протокол поддерживает большинством совеременных сред и языков программирования, как-то .NET-языки, Java, PHP, Perl, Delphi etc.
Не факт. Не забывай про description service - ты можешь написать лишь сам сервис и опубликовать его в сети, а другие программеры напишут к нему своих клиентов на всевозможных платформах. Например, ты напишешь сервис, к-й выдает прогноз погоды в данном городе. Другие программеры используют этот ресурс в своих приложениях, к-е могут быть консольными, WinForms, а также с веб-интерфейсом. Короче, какие хочешь. Ну, конечно, ты можесь сделать и клиента. Однако, не забывай, что твой "клиент" может быть лишь ссылкой на странице (т.е. обращаешься по протоколу HTTP-GET), хотя, ессно, для пользователя очень неудобно получать ответ в XML-формате, нужен клиент, к-й проанализирует этот XML и выдаст результат в приятной т понятной форме.
Клиент все равно нужен (однако, как я уже сказал, вся его реализация может заключаться в формировании ссылки..). Апплеты тут не причем. Я бы сравнил это с программированием на серверных языках типа PHP. Т.е. сервер генерирует XML и отсылает клиенту. Дальше - это личное дело клиента, как он отоьразит эту информацию.
Да. Я бы назвал это разделением труда. Одни занимаются сервисами, другие - используют их как кирпичики в своих приложениях. Пример - Майкрософтовский .NET-Passport - система аутентификации пользвателей.
Насколько я знаю - да. Это позволяет обойти всякие firewall'ы и прочие трудности.
Пример.. Пример.. Ладно, пусть будет то самое сложение чисел. Открываем VS (руководства по написанию сервисов на других ЯП спрашивать в соотв. разделах форума). Создаем новый проект, при этом IIS должен быть запущен. Выбираем "ASP.NET WebService". Для работы с web-сервисами на .NET-платформе используется пространство имен System.Web.Services, и, создав сервис средствами VS, можно заметить, что наш сервис будет наследником от System.Web.Services.WebService, что, однако, не является необходимым условием - можно создать сервис и на основе System.Object, просто WebService обеспечивает набор очень полезных методов, что позволяет облегчить разработку. VS создала для нас след. файлы: 1)*.asmx - файл в формате WSDL. Автоматически генерируется VS. 2)*.asmx.cs - собственно, реализация сервиса 3)*.disco - описание web-службы. Перед тем как использовать службу, клиент долен убедиться, что сервис действительно существует по данному адресу. Итак, добавляем наш метод. В файле Service1.asmx.cs добавляем в класс Service1 строки:
WebMethod указывает на то, что это метод сервиса. Там можно еще кучу свойств указывать типа описания метода и т.п., но сейчас это не важно. Итак, у нас есть сервис, к-й складывает два целых числа. Откомпилим этот проект. Теперь или просто запустим (откроется броузер) или откроем вручную броузер (я предпочитаю этот вариант) и в строке адреса укажем:
Появится описание сервиса (WSDL-описание можно посмотреть по ссылке "Service Description" справа вверху. Именно его будут использвать клиенты в своих приложениях), а также описание публикуемых методов, где ма не без удивления обнаружим наш SuperAdd. Кликнув по ссылке, получим описание метода, как к нему обращаться через HTTP-POST и SOAP, а также прилашение опробовать метод в действии - а именно, два текстовых поля, куда можно ввести целые (!) числа. Введем, например, 2 и 3 и жмем Invoke. Откроется новое окно броузера с таким текстом:
Это и есть ответ сервера. Именно этот текст будут анализировать клиенты. Теперь добавим в наш проект возможность складывать вещественные числа:
Все хорошо, все компилится, но при запуске получаем ошибку:
Произошла ошибка на уровне SOAP. Методы имеют одинаковые имена! Для устранения этой беды используем, как и предлагается, аттрибут MessageName. Заодно опробуем и аттрибут Description, весьма полезный при практическом использовании:
Теперь все будет ОК. ... Два слова о клиентах. При разработке клиента нужно уметь передавать данные по протоколу SOAP, как сказано при описании Вашего сервиса. Формировать SOAP-запрос довольно тяжело, поэтому при разработке .NET-клиента испольуется понятие прокси-сборки. Т.е. генерируется сборка, к-я преобразует вызовы клиента в SOAP и отсылает на сервер. Клиент же работает с "удаленной" сборкой так, как будто она расоложена на его же машине. Такая прокси-сборка формируется с помощью утилиты wsdl.exe, однако, при использовании VS, такая сборка генерируется автоматически с одним НО: при VS генерирует прокси-сборку, к-я может общаться лишь по SOAP-протоколу (в отличие от wsdl.exe, где протокол можно указать вручную). Хотя, надо признать, такое решение оправданно - в большинстве случаев SOAP - оптимальный вариант. Итак, создадим консольного клиента. Первым делом создаем прокси-сборку: Project->Add WebReference. Там вписываем наш URL (http://localhost/serviceTest0/service1.asmx) и жмем "Add Reference". В итоге получаем сборку с именем, соответсвующим имени сервера, где расположен сервис. В нашем случае - localhost. Теперь пример использования этой сборки. Это очень простой код, на деталях я останавливаться не буду. Зочу лишь заметить, что реально сложение обрабатывается сервером, а не клиентом:
Т.е. мы сначала создаем обеъкт, а потом используем его методы. Ну, и на последок о пользовательский типах. Чтобы сервис мог работать с пользвательскими типами, их следует определить в том же namespace'е, что и сервис, только перед определением указать:
За сим все. Мне кажется, для начала хватит. Замечу лишь, что к нашему сервису отлично пишется клиент на Delphi и др. ЯП. -------------------- Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед) ... Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн) |
||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||
vola |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 14.4.2007 Репутация: нет Всего: нет |
Да, а как же искать веб-сервисы? Правильно ли я понимаю что должны существовать сайты-каталоги с описаниями публичных сервисов? И как используется UDDI ?
|
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |