Уеб услуги с asp. Net



страница2/9
Дата24.03.2017
Размер0.86 Mb.
#17693
1   2   3   4   5   6   7   8   9

Уеб услуги


Уеб услугите са нова ера в разработката на разпределени приложения. Те предоставят ново ниво на абстракция над вече съществуващите моде­ли, което стои над езиците за програмиране, операционните системи и мре­жовите комуникационни протоколи. Възползвайки се от вече изградените технологични модели в Интернет и базирайки се изцяло на отворени стандарти, уеб услугите се превръщат в основната инфраструктура, която свързва всички компютърни устройства.

Преди да се спрем по-подроб­но на технологията на уеб услугите, нека първо обясним какво всъщност означава терминът “услуга”.


Какво е услуга?


В реалния живот услугата представлява единица работа извършена от доставчика на услуги. На всеки от нас му се случвало да му се развали телевизора или да му се запуши водопроводен канал. В такъв случай ние извикваме техник и той трябва да реши проблема, като представи пред нас желания резултат – поправен телевизор или отпушен канал.

В описаните сценарии ние се явяваме клиенти на услугата, т.е. нейни консуматори, а фирмата, за която работи техникът, неин доставчик. Услугата има ясно дефинирани входни па­ра­метри и ясна цел (изходни резултати). Тя има различни качествени ха­рактеристики: цена на самата услуга, време за нейното извършване, коректност при изпълнението й и други. Услугата е лесна за използване – ние не се интересуваме по какъв начин нашият телевизор ще бъде попра­вен или колко усилия ще израз­ходва водопроводчикът за да отпуши кана­ла – за нас е важно работата да бъде свършена. Услугата е и винаги достъпна при нужда от нея.


Какво е уеб услуга?


Уеб услугите не само наподобяват услугите от реалния живот, но и моде­ли­рат тяхното поведение. Те представляват програмни компоненти (ня­как­ва специфична логика, изчислителен ресурс или определена информа­ция), които са достъпни отдалечено през уеб.

Уеб услугите са достъпни на практика от всеки клиент, който поддържа връзка с уеб, защото използват отворени Интернет стандарти за комуни­кация. Те са независими както от операционната система, така и от платформата и езиците за програмиране, на които се разработват.

Архитектурно уеб услугите са функционално независими компоненти и са слабо обвързани с клиента, който ги използва (loosely coupled). Клиентът поръчва, услугата изпълнява поръч­ката и връща резултата обратно при клиента. Клиентът не се интересува как точно работи уеб услугата и за да я използва не трябва да знае нищо повече за нея освен какви входни данни да й подаде.

Принцип на действие на уеб услугите


Уеб услугите представляват XML базиран стандарт за отдалечено извик­ване на функционалност. Те работят на принципа на обмяна на прости SOAP съобщения между клиента и доставчика на услугата. Всяко съобще­ние се състои от данни и метаданни, описващи тези данни. Ще се спрем по-подробно на стандарта SOAP и на структурата на SOAP съобщенията малко по-нататък, когато разглеж­даме инфраструкту­рата на уеб услугите.

Уеб услугите използват утвърдения в Интернет и при уеб технологиите модел „заявка/отговор” (request/response), т. е. за всяка една отделна заявка към сървъра, той връща отделен отговор специално за нея. По същия модел работят и уеб приложенията [TODO: link] – уеб клиентът подава HTTP заявки, а уеб сървърът ги обработва и връща HTTP отговор.


Пренос на SOAP съобщения по HTTP


При уеб услугите протоколът за пренос на заявките и отговорите по подраз­би­ране е HTTP, но като такъв може да се използва и всеки друг про­токол, който може да пренася XML данни. Следващата фигура илюст­рира използването на HTTP за пренос на SOAP съобщения:

HTTP заявката се състои от две части: хедър, който съдържа различни параметри на заявката (информация за самата заявка и за клиента, който я изпраща) и тяло, което съдържа SOAP съобщението. SOAP съобщението се състои също от две части: данни (SOAP body) и метаданни (SOAP header).

В хедъра на HTTP заявката се посочва нейният вид. В примера е изпол­звана HTTP-POST заявка по версия 1.1 на HTTP протокола. В хедъра се задава още типът на съдържанието (Content-Type), който трябва да е text/xml, тъй като SOAP съобщенията представляват XML. Заявката за­дължително трябва да съдържа и хедъра SOAPAction, дори и ако той е без съдържание. Неговото предназначение е да укаже същността на SOAP съобщението.

След като получи така формираната заявка, сървърът изпраща отговор, който може да е или със статус 200 OK (успех), или статус 500 Internal Server Error (грешка). Грешка се връща, ако SOAP съобщението, изпра­тено като отговор, съдържа SOAP Fault, т. е. възникнал е проблем (изключение) при изпълнението на услугата.


Инфраструктура на уеб услугите


След като проследихме в детайли как се транспортират SOAP заявките и съответните им отговори, сега ще разгледаме цялата инфра­струк­тура на уеб услугите – съвкупността от стандартите, моделите и принципите, на които те се базират.

Инфраструкту­рата на уеб услугите е изградена върху няколко основни принципа: тя прави услугите лесно достъпни, самоописващи се и използ­ващи вече утвърдени и стандартизирани протоколи за комуникация.

На схемата по-горе са представени отделните компоненти от цялостната инфраструктура на уеб услугите:


  1. Директория (Directory) – представлява централизирано място (каталог) за съхранение на описания на уеб услуги, разработени от различни производители. Предоставя възможност за търсене на услуги по раз­лични параметри. Използва се стандартът UDDI (Universal Description, Discovery, and Integration), който служи за регистрация, откриване и свързване към конкретна уеб услуга.

  2. Откриване (Discovery) – това е процесът на намиране описанието на дадена уеб услуга. DISCO спецификацията предоставя начин за откри­ване на описанията на уеб услуги, разположени на определен сървър.

  3. Описание (Description) – за да можем да използваме определена уеб услуга трябва да знаем нейното описание (програмен интер­фейс). Описанието се изготвя по стандартизиран начин чрез използване на XML базирания език за описание на интерфейса на уеб услуги – WSDL (Web Services Description Language).

  4. Формат на заявките (Wire Format) – за да бъдат универсални уеб услугите се нуждаят от стандарти и протоколи, които са утвърдили мястото си в Интернет пространството. Това са XML, XSD, HTTP и SOAP.

Всички тези компоненти са обвързани помежду си и изграждат цялостната инфраструктура на уеб услугите. Ще се спрем по-подробно на всеки един от тях.

Директории за уеб услуги


Директориите за уеб услуги представляват единно място, където различ­ни производители публикуват информация за услугите, който предлагат. Директориите са като уеб указател за услуги (каталог). Самите уеб услуги са органи­зи­рани в различни категории, като по този начин е улеснено намирането на услуги за определена цел или поставена задача. Директо­риите предлагат търсене на услуги по зададени параметри (производител, категория, име). Публикуването и търсенето на инфор­мация за дадена уеб услуга става посредством UDDI стандарта.

Universal Description, Discovery, and Integration (UDDI)


UDDI представлява отворен XML базиран стандарт за регистриране, откриване и свързване към уеб услуги. Спецификацията му е раз­ра­боте­на първоначално съвместно от Microsoft и IBM, а в момента се поддържа и развива от консорциума OASIS (Organization for the Advancement of Structured Information Standards).

UDDI сам по себе си също е уеб услуга. Нейната функционалност включва регистрация и търсене на други услуги.

Microsoft предлага набор от класове (UDDI SDK), чрез които могат да се разработват приложения, използващи цялата мощ и гъвкавост на UDDI. Тези класове напълно съвпадат с описаните в специфика­цията на UDDI стандарта.

Примери за UDDI директории


Ето няколко примера за UDDI директории, публично достъпни в Интернет:

  • http://uddi.microsoft.com (http://test.uddi.microsoft.com)

  • https://uddi.ibm.com/ubr/registry.html (https://uddi.ibm.com/testregistry/registry.html)

  • http://uddi.sap.com (http://udditest.sap.com)

Забележка: в скоби са адресите, които могат да се използват за тестови цели или по-време на разработка.

Ето как изглежда UDDI директорията на Microsoft:



На картинката можем да видим, че сме намерили уеб услуга, която ще ни предостави информация какво е времето в голяма част от международни­те летища. Освен тази услуга компанията-производител (Cape Clear Software) предлага още няколко, които можем да видим в лявата част на прозореца. В детайлите за услугата се вижда и нейният Service Key. В UDDI ре­гистри­те при реги­стрирането на дадена уеб услуга, на нея й се дава уникален идентификатор – Service Key, който я прави уникална в глобалната мрежа. Този идентификатор след това може да се използва за динамичен достъп до услугата през UDDI.


Откриване на уеб услуги


Разгледахме какво представляват UDDI директориите за услуги, а сега ще проследим процеса на откриване на уеб услуги. Този процес има за цел локализация и извличане на описанията на уеб услуги, разположени върху даден сървър. За откриването на услугите се използва DISCO спе­цификацията.

DISCO (Discovery of Web Services)


DISCO спецификацията е разработена от Microsoft и името и идва от нейното пред­­назначение. DISCO е също XML базиран стандарт и има изключително проста структура. Неговата цел е да посочи връзката към файла с описанието на уеб услугата, връзката към самата услуга и връзка към документация за услугата. Документите с DISCO описание се съхра­няват във файл с разширение .disco. Ето пример за такъв файл:

TypesService.disco



xmlns="http://schemas.xmlsoap.org/disco/">



ref="http://www.myserver.com/Demo-5-Service- Types/TypesService.asmx?wsdl"

docRef="http://www.myserver.com/Demo-5-Service- Types/TypesService.asmx"

xmlns="http://schemas.xmlsoap.org/disco/scl/" />



address="http://www.myserver.com/Demo-5-Service- Types/TypesService.asmx"

xmlns:q1="http://www.myserver.com/schemas/ Demo_5_Service_Types/"

binding="q1:TypesServiceSoap"

xmlns="http://schemas.xmlsoap.org/disco/soap/" />



Обикновено .disco файлът се разполага в главната директория на съот­ветната уеб услу­га. Например, ако услугата е разположена на уеб сър­въра www.myserver.com и се казва math и главната й директория е със същото име, то пътят към .disco файла за тази услуга ще бъде http://www.myserver.com/math/math.disco.

Уеб услугите, разработени с ASP.NET, връщат своя disco файл, когато са извикани с параметър ?disco, например http://www.myserver.com/Demo-5-Service-Types/TypesService.asmx?disco.


UDDI и DISCO


Както вече разбрахме, и UDDI и DISCO ни предлагат начини за откриване на уеб услуги. А каква е разликата между двата стандарта?

UDDI ни предоставя централизирано място регистриране на услуги, където те са разпределени в различни категории, спрямо някакви признаци. Ако искаме нашата уеб услуга да е обществено достъпна и лесно откриваема, трябва да я регистрираме в UDDI регистрите.

Стандартът DISCO ни дава възможност за откриване на всички уеб услуги, разполо­жени локално на конкретен сървър, поради което е много удобен в процеса на разработката на софтуер. DISCO е и тясно интегриран с Visual Studio .NET.

Някои уеб услуги може да нямат DISCO описание, защото то не е задължителна, а само препоръчителна част от уеб услугите.


WSDL описания на услуги


Следващата важна част от инфраструктурата на уеб услугите е тяхното описание. За да можем да използваме дадена уеб услуга, трябва да знаем нейния интерфейс за достъп. Той представлява описание на методите, които уеб услугата предоставя, техните имена, входни и изходни парамет­ри, използваните типове данни и други метаданни за самата услуга.

За описанието на интерфейса и начина на достъп до уеб услуги се използва XML базираният език WSDL (Web Services Description Language), чете се „уиздъл”. Той също е отворен стандарт и с неговото развитие се занимава W3C (World Wide Web Consortium).

Едно от предимствата на WSDL е, че той е разширяем във всяко едно отношение. Той нито ни обвързва с конкретен транспортен протокол, нито изисква определена схема, по която да описваме сложните типове, които използваме в нашите услуги. Така е възможно различни технологии да използват различни XML базирани описания на типовете данни, с които работят.

Също както връщат своя disco файл, уеб услугите разработени с ASP.NET, връщат WSDL описанието си когато бъдат извикани със специалния пара­метър ?wsdl. Например:



http://www.myserver.com/Demo-5-Service-Types/TypesService.asmx?wsdl

WSDL описание – пример


Нека да разгледаме по-подробно WSDL описанието на една примерна уеб услуга – услугата TypesService.asmx (вж. примера от точка "Прехвърляне на типове"):

TypesService.wsdl



xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"

xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"

xmlns:s="http://www.w3.org/2001/XMLSchema"

xmlns:s0="http://www.myserver.com/Demo_5_Service_Types/"

xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"

xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"

xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"

targetNamespace=

"http://www.myserver.com/services/Demo_5_Service_Types/"

xmlns="http://schemas.xmlsoap.org/wsdl/">



elementFormDefault="qualified" targetNamespace= "http://www.myserver.com/Demo_5_Service_Types/">























...









...


...



Returns a list of available colors.











...


...



transport="http://schemas.xmlsoap.org/soap/http"

style="document" />



style="document" />













...






Demo Web service - demonstrates complex type marshalling.








Структура на WSDL описанието


WSDL изгражда едно абстрактно описание на услугата – поддържаните методи, използваните типове данни, начин за достъп до услугата, както и самият й адрес. По-важни елементи от WSDL описанието са:

  • typesтипът на данните, които се подават или връщат от услугата. По подразбиране се използва XSD за описването им (вж. темата "Работа с XML" [TODO: link], но може да се ползва и друга схема за описание на данни.

  • message описва съобщенията, които ще се обменят между услугата и клиента, както и от какъв вече описан тип са параметрите им.

  • portType абстрактната дефиниция за уеб услуга. Състои се от конкретни операции (методи). Спрямо вида на операцията може да има входни, изходни или съдържащи грешка елементи (fault), които сочат към вече описаните съобщения.

  • binding указва по какъв начин ще се обменят съобщенията за всяка от вече дефинираните операции.

  • service конкретната дефиниция на уеб услугата, която групира всички вече описани в PortType операции с конкретен Binding. Задава и адреса на уеб услугата.

Ето и диаграма, която представя описаните връзки между отделните елементи на WSDL описанието:


SOAP – формат на заявките


След като разгледахме как се откриват и описват уеб услугите, сега ще се спрем на най-важната част от тяхната инфраструктура, а именно как те се пренасят в хетерогенна среда каквато е Интернет.

В ядрото на уеб услу­гите стои SOAP стандартът, благодарение на който клиентът и доставчи­кът на услуги обменят съобщения помежду си.

SOAP (Simple Object Access Protocol) e XML базиран формат за обмяна на структурирана и типизирана информация в уеб пространството. При съз­даването на стандарта е спазван един основен принцип – той да не бъде усложняван допълнително (сложни архитектури като CORBA, вече са по­казали, че не са ефективни в Интернет), от тук идва и неговото име.

Предимства на SOAP


Не само заради своята простота SOAP е получил подкрепата на Microsoft, IBM, Sun Microsystems, SAP и др. Ето някои други негови преимущества:

  • Използва вече утвърдени в Интернет модели: XML за описание на съобщението, XSD за описание на използваните типове и HTTP като транспортен протокол.

  • Дефинира своя собствена и независима система за обмяна на съоб­щения (messaging framework), която е гъвкава и лесно разширяема.

  • Не е тясно свързан с конкретен език за програмиране или платформа за разработка. SOAP не предоставя програмен интерфейс (API), а оставя неговата разработка за конкретния език или платформа (.NET Framework, Java, PHP, ...).

  • Предоставя междуплатформена комуникация, защото в самата си същност той е изграден върху отворени стандарти (XML).

  • Не е свързан с конкретен транспортен протокол. Като такъв може да се използва всеки, който може да пренася XML (например HTTP, TCP, FTP, SMTP, ...).

  • Стандартно SOAP съобщенията се пренасят по HTTP, което позволява те да бъдат преминават през защитни стени (firewalls).

Развитието на SOAP


В началото на своето развитие (1998 г.) SOAP спецификацията се e свърз­вала главно с технологията на XML базираните отдалечени извиквания на методи – XML-RPC (Remote Procedure Call). Тя е описвала по свой собствен начин типовете, които са се предавали между клиента и сър­въра.

През 1999 г. създателите на SOAP залагат на XML Schema (XSD), чрез която да описват типовете, използвани в SOAP съобщението.

По-късно, през 2001 г., XSD е приет официално от W3C като препоръчван стандарт за обмяна на XML съобщения.

Постепенно SOAP набира популярност и получава подкрепата на Microsoft. Формира се версия 1.0 на стандарта. IBM и други софтуерни компании виждат преимуществата на SOAP и през пролетта на 2001 г. заедно с Microsoft изготвят версия 1.1. Промените спрямо версия 1.0 са незначи­телни, но по-важното е, че вече целта на SOAP не е единствено отдале­ченото извикване на методи. SOAP сам по себе си вече представлява framework за обмяна на XML базирани съобщения. Тогава е предложена пред W3C и приета като официален стандарт спецификацията SOAP версия 1.1.

В момента SOAP стандартът има версия 1.2, като промените спрямо 1.1 не са значителни (една от тях е, че SOAP вече не е акроним, а просто име). В .NET Framework 1.1 е реализиран SOAP версия 1.1.

Структура на SOAP съобщенията


Структурата на едно SOAP съобщение не е сложна. Тя се състои от две части: SOAP хедър (header) и SOAP тяло (body), а като коренов елемент на цялото съобщение стои елементът плик (envelope), който трябва да съдържа пространството от имена (namespace) за SOAP съобщението.

На следващата фигура е показана структурата на едно просто SOAP съобщение. Можем да видим и пространството от имена, което в случая е http://schemas.xmlsoap.org/soap/envelope/ спрямо версия 1.1 на SOAP стандарта. Във версия 1.2 това пространство е сменено и неговият нов идентификатор в глобалната мрежа (URI – Uniform Resource Identifier) е: http://www.w3.org/2003/05/soap-envelope/.



След като разгледахме примерното SOAP съобщение, сега ще се спрем по-подробно на основните негови елементи: хедър и тяло.


SOAP хедър


Елементът хедър не е задължителен в едно SOAP съобщение, но ако той присъства задължително трябва да е преди тялото на съобщението. Неговата цел е да разшири самото съобщение като добави допълнителна мета информация (метаданни) извън тялото. Тази информация може да има различен характер. Ето и някои от най-честите приложения на SOAP хе­дъра:

  • Маршрутизация (routing) – ако съобщението е предназначено за няколко получателя или трябва да премине през различни точки, в хедъра може да се укаже информация за маршрутизиране (последо­вателността на преминаване през отделните точки).

  • Транзакция – ако съобщението е част от разпределена транзакци­онна система, тя може да се опише в хедъра.

  • Автентикация (authentication) – получателят може да изисква пода­телят да се автентикира преди съобщението да бъде обработено. Автентикацията може да се базира на пароли, на цифрови подписи и сертификати или на друг механизъм.

  • Сигурност – ако получателят иска да е сигурен, че съобщението не е подправено, подателят може да подпише цифрово тялото на съобще­ние­то и да постави генерирания подпис в хедъра (технологията на цифровия подпис в описана подробно в темата "Сигурност в .NET Framework" [TODO: link]).

  • Компресия – ако тялото на съобщението е обемно, подателят може да го компресира и да укаже вида на използвания компреси­ращ алгоритъм в хедъра.

SOAP тяло


За разлика от хедъра SOAP тялото е задължителен елемент, защото в него е разположена същ­ността на съобщението. Тялото може да съдържа какъвто и да е текст (в частност XML), стига неговата структура да не разваля тази на съобщението. Има два вида SOAP съобщения: про­цедурно-ориентирани (procedure-oriented) и документно-ориентирани (document-oriented).

При документно-ориентираните съобщения всякакъв вид информация може да бъде кодирана (encoded) и изпратена до съответния получател. .NET Framework, например, ни дава възможността и да сериализираме даден обект чрез SoapFromatter (вж. темата "Сериализация на данни" [TODO: link]) и да го изпратим като SOAP съобщение.

За разлика от документно-ориентирани съобщения при процедурно-ори­ентираните се осъществява двустранна комуникация между клиента и сървъра. Клиентът изпраща заявка към сървъра, като в тялото на съобщението указва, кой предоставен метод иска да извика и с какви параметри. Сървърът обра­бот­ва заявката и връща отговор, съдържащ резултата от изпълнението на метода, обратно към клиента.

Обмяна на SOAP съобщения – пример


Ето примерна заявка, направена от клиент, който извиква метод за намиране на разстоянието между две точки в правоъгълна координатна система:



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/">






4

5

7

-3






Всяка точка е представена като структура с две координати. Методът, който ще се извика на сървъра с параметри двете точки, е CalcDistance. Ето и отговорът, който ще се върне след неговото успешно изпълнение:



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/">







8,54400374531753










SOAP грешка (fault)


Тялото на SOAP съобщението може да съдържа и информация за възник­нали грешки или изключения при изпълнението на услугата. Инфор­мацията за грешката, ако има такава, се записва в елемента fault.

Ето тялото на примерно SOAP съобщение със SOAP грешка, което е изпратено към клиента, защото на сървъра е хвърлено изключение:



xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">





soap:Server

Attempted to divide by zero.











SOAP fault може да съдържа няколко елемента. Ето по-важните от тях:

  • faultcode – указва къде е възникнала грешката.

  • faultstring – предоставя текстово описание на грешката.

  • detail – незадължителен елемент, който може да съдържа XML с допълнителна информация за грешката.

Протоколен стек на уеб услугите


Уеб услугите, както вече може би сте се убедили, обединяват в себе си много технологии. За всяка отделна част от тяхната инфраструктура има отделен стандарт, който описва как се извършва взаимодействието с останалите части от инфраструктурата. За да изясним взаимоотношенията между отделните стандарти и протоколи, нека разгледаме следващата фигура, която описва отделните слоеве от комуникацията с уеб услугите:

Ще започнем отдолу нагоре, като се движим от по-общите стандарти към тези, който са по-тясно свързани с уеб услугите.

На ниво транспорт стои протоколът HTTP, който е в основата на WWW и уеб технологиите. Както вече знаем, HTTP реализира модела „заявка - отговор”, който се използва и при уеб услугите. Един от недостатъците на HTTP е, че не поддържа стандартно сесия, т. е. той е stateless (няма състо­яние). Всяка заявка е отделна за себе си и независима от останалите. По тази причина уеб услугите най-често реализират функционалност, при която не се пази състояние, но чрез специални техники, които ще разгледаме по-нататък, този проблем може да се преодолее.

Основното предназначение на HTTP е да пренася данни от уеб сървъра към клиента. В случая на уеб услугите тези данни са под формата на XML. Със своята простота, мощ и разширяемост XML е най-универсалният начин за пренасяне на структурирана информация в глобалната мрежа. Именно поради това, XML е в основата на всички стандарти и протоколи, свързани с уеб услугите.

Описанието на структурата и формата на предаваните във вид на XML данни се извършва чрез XSD схеми. Чрез XSD се описват типовете данни, пренасяни при извикването на уеб услуги.

Чрез вече описаните типове се изгражда абстрактният програмен интер­фейс на услугата чрез езика за описание на уеб услуги (WSDL).

SOAP стандартът осигурява инфраструктура за изпращане и получаване на XML съобщения, чрез които се извикват предоставените методи от уеб услугата и се получава резултатът от тяхното изпълнение.

Ето и една диаграма, която показва взаимовръзките между отделните протоколи и стандарти, разделени в три логически стека: стек за обмя­на на съобщения, стек за описания и стек за откриване на уеб услуги:







Сподели с приятели:
1   2   3   4   5   6   7   8   9




©obuch.info 2024
отнасят до администрацията

    Начална страница