Itifaki ya Upatikanaji wa Kitu Rahisi (SOAP) - maelezo ya jumla. itifaki ya SABUNI. Dhana za kimsingi. Muundo wa Ujumbe wa SABUNI

Sehemu ya sauti.

Fikiria kuwa umetekeleza au unatekeleza mfumo fulani ambao unapaswa kupatikana kutoka nje. Wale. kuna seva fulani ambayo unahitaji kuwasiliana nayo. Kwa mfano, seva ya wavuti.

Seva hii inaweza kufanya vitendo vingi, kufanya kazi na hifadhidata, kufanya maombi ya wahusika wengine kwa seva zingine, kufanya mahesabu, nk. kuishi na ikiwezekana kukuza kulingana na hali anayoijua (yaani kulingana na hali ya watengenezaji). Haipendezi kwa mtu kuwasiliana na seva kama hiyo, kwa sababu anaweza kuwa hawezi / kutaka kutoa kurasa nzuri na picha na maudhui mengine ya kirafiki. Imeandikwa na inafanya kazi ya kufanya kazi na kutoa data inapoulizwa kwake, bila kuwa na wasiwasi kwamba inaweza kusomeka na binadamu, mteja atashughulikia mwenyewe.

Mifumo mingine, kufikia seva hii, inaweza tayari kutupa data iliyopokelewa kutoka kwa seva hii kwa hiari yao wenyewe - mchakato, kukusanya, kutoa kwa wateja wao, nk.

Kweli, moja ya chaguzi za kuwasiliana na seva kama hizo ni SOAP. Itifaki ya kubadilishana ujumbe wa SOAP xml.

Sehemu ya vitendo.

Huduma ya wavuti (hili ndilo jina la kile ambacho seva hutoa na kile ambacho wateja hutumia) hufanya iwezekanavyo kuwasiliana na seva na ujumbe uliopangwa wazi. Ukweli ni kwamba huduma ya wavuti haikubali data yoyote. Huduma ya wavuti itajibu kwa hitilafu kwa ujumbe wowote ambao hauzingatii sheria. Hitilafu, kwa njia, pia itakuwa katika fomu ya xml na muundo wazi (ambayo si kweli kuhusu maandishi ya ujumbe).

WSDL (Lugha ya Maelezo ya Huduma za Wavuti). Sheria ambazo ujumbe hutungwa kwa huduma ya wavuti pia hufafanuliwa kwa kutumia xml na pia zina muundo wazi. Wale. Ikiwa huduma ya mtandao hutoa uwezo wa kupiga simu njia, lazima kuruhusu wateja kujua ni vigezo gani vinavyotumiwa kwa njia hii. Ikiwa huduma ya wavuti inatarajia mfuatano wa Method1 kama kigezo na mfuatano huo unapaswa kuitwa Param1, basi sheria hizi zitabainishwa katika maelezo ya huduma ya tovuti.

Sio tu aina rahisi, lakini pia vitu na makusanyo ya vitu vinaweza kupitishwa kama vigezo. Maelezo ya kitu huja chini kwa maelezo ya kila sehemu ya kitu. Ikiwa kitu kina mashamba kadhaa, basi kila shamba linaelezwa, aina yake, jina (ni maadili gani iwezekanavyo). Mashamba pia yanaweza kuwa ya aina ngumu, na kadhalika mpaka maelezo ya aina yanaisha na rahisi - kamba, boolean, nambari, tarehe ... Hata hivyo, baadhi ya aina maalum zinaweza kugeuka kuwa rahisi, ni muhimu kwamba wateja wanaweza kuelewa ni maadili gani wanaweza kuwa nayo.

Kwa wateja, inatosha kujua url ya huduma ya wavuti; wsdl itakuwa karibu kila wakati, ambayo unaweza kupata wazo la njia na vigezo vyao ambavyo huduma hii ya wavuti hutoa.

Ni faida gani za kengele na filimbi hizi zote:

  • Katika mifumo mingi, maelezo ya mbinu na aina hutokea moja kwa moja. Wale. programu kwenye seva inahitaji tu kusema kwamba njia hii inaweza kuitwa kupitia huduma ya mtandao, na maelezo ya wsdl yatatolewa moja kwa moja.
  • Maelezo, ambayo yana muundo wazi, yanasomeka na mteja yeyote wa sabuni. Wale. chochote huduma ya wavuti, mteja ataelewa ni data gani huduma ya wavuti inapokea. Kutumia maelezo haya, mteja anaweza kujenga muundo wake wa ndani wa madarasa ya kitu, kinachojulikana. binding" na. Matokeo yake, mtayarishaji programu anayetumia huduma ya wavuti lazima aandike kitu kama (pseudocode):

    NewUser:=TSapUser.Create("Vasya","Pupkin","admin"); sabuni.AddUser(NewUser);

  • Uthibitishaji otomatiki.

    • uthibitishaji wa xml. xml lazima iwe imeundwa vizuri. xml batili - mara moja hitilafu kwa mteja, mwache alitatue.
    • uthibitishaji wa schema. xml lazima iwe na muundo fulani. xml hailingani na schema - mara moja kosa kwa mteja, mwache alitatue.
    • Uthibitishaji wa data unafanywa na seva ya sabuni ili aina na vikwazo vya data zilingane na maelezo.
  • Uidhinishaji na uthibitishaji unaweza kutekelezwa kwa kutumia njia tofauti. asili. au kutumia idhini ya http.
  • Huduma za wavuti zinaweza kufanya kazi kupitia itifaki ya sabuni na kupitia http, ambayo ni, kupitia maombi ya kupata. Hiyo ni, ikiwa vigezo ni data rahisi (bila muundo), basi unaweza kupiga simu ya kawaida kupata www.site.com/users.asmx/GetUser?Name=Vasia au chapisho. Walakini, hii sio kila mahali na sio kila wakati.
  • ... tazama kwenye Wikipedia

Pia kuna hasara nyingi:

  • Ukubwa mkubwa wa ujumbe usio na sababu. Kweli, hapa asili ya xml ni kwamba umbizo ni la ziada, kadiri vitambulisho vingi, habari isiyo na maana zaidi. Sabuni ya ziada huongeza upungufu wake. Kwa mifumo ya intranet, suala la trafiki ni chini ya papo hapo kuliko mtandao, hivyo sabuni kwa mitandao ya ndani inahitajika zaidi, hasa Sharepoint ina huduma ya mtandao ya sabuni ambayo unaweza kuwasiliana na mafanikio (na baadhi ya mapungufu).
  • Kubadilisha maelezo ya huduma ya wavuti kiotomatiki kunaweza kuvunja wateja wote. Kweli, ni kama hii kwa mfumo wowote, ikiwa utangamano wa nyuma na njia za zamani hauhimiliwi, kila kitu kitaanguka ...
  • Sio minus, lakini shida. Simu zote za mbinu lazima ziwe za atomiki. Kwa mfano, tunapofanya kazi na hifadhidata, tunaweza kuanza shughuli, kutekeleza maswali kadhaa, kisha kurudisha nyuma au kujitolea. Hakuna shughuli katika sabuni. Ombi moja, jibu moja, mazungumzo yamekwisha.
  • Kukabiliana na maelezo ya kile kilicho kwenye upande wa seva (kila kitu kinaelezewa kwa usahihi?) na ni nini kwenye mteja (nini nilichoelezwa hapa?) inaweza kuwa vigumu sana. Kulikuwa na mara kadhaa nilipolazimika kushughulika na upande wa mteja na kumshawishi mpangaji wa seva kuwa data yake ilielezewa vibaya, lakini hakuweza kuelewa chochote juu yake hata kidogo, kwa sababu kizazi kiotomatiki na hapaswi, ni suala la programu. Na kosa, kwa kawaida, lilikuwa kwenye msimbo wa njia; mpangaji programu hakuiona.
  • Mazoezi yanaonyesha kuwa watengenezaji huduma za wavuti wako mbali sana na watu wanaotumia huduma hizi za wavuti. Kwa kukabiliana na ombi lolote (halali kutoka nje), kosa lisiloeleweka "Hitilafu 5. Kila kitu ni mbaya" kinaweza kuja. Yote inategemea dhamiri ya watengenezaji :)
  • Nina hakika bado sikumbuki kitu ...

Kwa mfano, kuna huduma ya wavuti wazi ya belavia:

  • http://86.57.245.235/TimeTable/Service.asmx - hatua ya kuingia, pia kuna maelezo ya maandishi ya mbinu kwa watengenezaji wa tatu.
  • http://86.57.245.235/TimeTable/Service.asmx?WSDL - wsdl maelezo ya mbinu na aina za data iliyopokelewa na kurejeshwa.
  • http://86.57.245.235/TimeTable/Service.asmx?op=GetAirportsList - maelezo ya mbinu mahususi yenye mfano wa aina ya ombi la xml na jibu la xml.

Unaweza kuunda na kutuma ombi wewe mwenyewe kama:

POST /TimeTable/Service.asmx HTTP/1.1 Mpangishi: 86.57.245.235 Aina ya Maudhui: maandishi/xml; charset=utf-8 Content-Length: urefu SOAPAction: "http://webservices.belavia.by/GetAirportsList" ru

jibu litakuja:

HTTP/1.1 200 Sawa Tarehe: Mon, 30 Sep 2013 00:06:44 GMT Seva: Microsoft-IIS/6.0 X-Powered-By: ASP.NET X-AspNet-Version: 4.0.30319 Cache-Control: faragha, max -umri=0 Aina ya Maudhui: maandishi/xml; charset=utf-8 Urefu wa Maudhui: 2940

PS Hapo awali, huduma ya wavuti ya Aeroflot ilifunguliwa, lakini baada ya 1C kuongeza usaidizi wa sabuni kwa 8ku, kundi la wajaribu 1C wa beta waliisakinisha. Sasa kuna kitu kimebadilika hapo (sijui anwani, unaweza kuitafuta ikiwa una nia).
Kanusho la ZZY. Alizungumza katika kiwango cha kila siku. Unaweza kupiga teke.

SABUNI ni nini?

SOAP inawakilisha Itifaki ya Ufikiaji Rahisi wa Kitu. Natumaini baada ya kusoma makala utabaki tu kujiuliza: "Jina hili la ajabu ni nini?"

SOAP katika umbo lake la sasa ni mbinu ya simu ya mbali (RPC) kupitia mtandao. (Ndiyo, inatumika pia kuhamisha hati kama XML, lakini tutaiacha kwa sasa.)

Hebu tufikirie. Fikiria kuwa una huduma ambayo inarejesha bei ya hisa kwa tiki fulani (alama ya hisa). Hutuma data kwenye tovuti ya Nasdaq na kutoa matokeo yanayohitajika kulingana na HTML iliyorejeshwa. Kisha, ili kuruhusu wasanidi programu wengine kuitumia ndani ya programu zao, unatengeneza kijenzi kutoka kwa huduma hii ambacho hupata taarifa kuhusu nukuu kupitia Mtandao. Inafanya kazi vizuri hadi siku moja Nasdaq ibadilishe mpangilio wa kurasa zake. Unapaswa kufikiria upya mantiki nzima ya sehemu na kutuma sasisho kwa watengenezaji wote wanaoitumia. Nao, kwa upande wake, wanahitaji kutuma sasisho kwa watumiaji wao wote. Ikiwa hii itatokea kwa msingi zaidi au chini ya mara kwa mara, unaweza kutengeneza maadui wengi kati ya watengenezaji wenzako. Na watengenezaji programu, kama unavyojua, sio wa kuchezewa. Hutaki kuchukua picha ya paka uipendayo kesho kutoka kwa mashine ya kupasua afisi, sivyo?

Nini cha kufanya? Hebu tuone... unachohitaji ni kutoa chaguo moja la kukokotoa ambalo litachukua kama ingizo la alama ya tiki (aina ya kamba) na kurudisha nukuu ya hisa (aina ya kuelea au mara mbili). Kwa hivyo haingekuwa rahisi kuwaruhusu watengenezaji wako waite kitendakazi hiki kwenye Mtandao kwa njia fulani? Kubwa! Pia habari kwangu, kuna COM na Corba na Java wamekuwa wakifanya hivi kwa miaka ... ambayo ni kweli ni kweli, lakini njia hizi hazina dosari. Usanidi wa COM wa mbali sio mdogo. Kwa kuongeza, unahitaji kufungua bandari nyingi kwenye firewall kwamba huwezi kushughulikia bia ya kutosha kwa msimamizi wa mfumo. Ndio, na itabidi usahau kuhusu watumiaji wa mifumo yote ya uendeshaji isipokuwa Windows. Lakini watumiaji wa Linux pia wakati mwingine wanavutiwa na ubadilishanaji.

Ingawa inaonekana kama yote hayajapotea kwa watumiaji wa Linux ikiwa wanatumia DCOM, zaidi hapa: http://www.idevresource.com/com/library/res/articles/comonlinux.asp.

Siwezi kusema mengi kuhusu Corba na Java, kwa hivyo kama zoezi ninawaalika wasomaji kupata hasara katika mbinu hizi.

SOAP ni kiwango ambacho hukuruhusu kuelezea simu kama hiyo ya mbali na fomu ambayo matokeo yatarejeshwa. Kwa hivyo unahitaji kupangisha utendakazi wako katika programu inayoweza kufikiwa kwenye mtandao na kupokea simu kama pakiti za SOAP. Kisha unathibitisha ingizo, endesha utendaji wako, na urudishe matokeo katika pakiti mpya ya SABUNI. Mchakato mzima unaweza kuendeshwa kupitia HTTP, kwa hivyo sio lazima ufungue rundo la bandari kwenye ngome yako. Je, ni rahisi kweli?

Makala hii inahusu nini?

Hii ni ya kwanza katika mfululizo wa makala tunayoandika kuhusu SABUNI katika Programu ya Agni. Katika nakala hii nitajaribu kukupa wazo la SABUNI ni nini na jinsi ya kuandika programu inayowasiliana na seva ya SOAP.

Sabuni na XML

Ikiwa SABUNI bado inaonekana rahisi kwako, hebu tuongeze XML. Sasa, badala ya jina la kazi na vigezo, tunapata bahasha changamano ya XML, kana kwamba imeundwa kukuchanganya. Lakini usikimbilie kuogopa. Kuna zaidi ya hayo, na unahitaji kuona picha nzima ili kufahamu ugumu wa SABUNI.
Ikiwa haujui XML ni nini, soma kwanza nakala yangu kwenye XML hapa: http://www.agnisoft.com/white_papers/xml_delphi.asp.

Vifurushi vyote vya SOAP viko katika umbizo la XML. Ina maana gani? Hebu tuone. Angalia kazi hii (Pascal):
kazi GetStockQuote(Alama: kamba) : mara mbili; Inaonekana ni nzuri, lakini shida ni kwamba ni Pascal. Ni matumizi gani ya ufafanuzi huu rahisi kwa msanidi wa Java? Au kwa mtu anayefanya kazi na VB? Tunahitaji kitu ambacho kitaeleweka kwa kila mtu, hata watayarishaji wa programu za VB. Kwa hivyo wape XML iliyo na habari sawa (vigezo, maadili ya bei ya hisa, nk). Unaunda kifurushi cha SOAP, ambacho kimsingi ni wito kwa kazi yako, iliyofunikwa kwa XML ili programu yoyote kwenye jukwaa lolote iweze kuielewa. Sasa hebu tuone simu yetu ya SABUNI inaonekanaje:
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">


IBM


Taarifa, sawa? SABUNI inakuwa rahisi mbele ya macho yetu. Sawa, utani kando. Sasa nitajaribu kukueleza jinsi ya kuelewa simu hii ya SABUNI.

Usimbuaji tagi

Lebo ya kwanza inayovutia macho yako ni . Lebo hii ni karatasi ya nje ya kifurushi cha SOAP, iliyo na matamko kadhaa ya nafasi ya majina ambayo hatuvutiwi nayo, lakini ni muhimu sana kwa lugha yoyote ya programu au kichanganuzi. Nafasi za majina zimefafanuliwa ili kuhakikisha kuwa viambishi awali vifuatavyo kama vile "SOAP-ENV:" au "xsd:" vinaeleweka na kichanganuzi.

Lebo inayofuata - . (Tumekosa lebo ambayo haijaonyeshwa hapa - . Haiko katika mfano huu, lakini ikiwa unataka kusoma zaidi kuihusu, angalia maelezo ya SABUNI hapa: http://www.w3.org/TR/SOAP/). Lebo kweli ina simu ya SOAP.

Lebo inayofuata katika orodha ni . Jina la lebo, GetStockQuote, ndilo chaguo la kukokotoa linaloitwa. Katika istilahi ya SOAP, hii inaitwa operesheni. Kwa hivyo GetStockQuote ni operesheni ambayo lazima ifanywe. ns1 ndio nafasi ya jina inayoelekeza kwa urn:xmethods-quotes kwa upande wetu.

Dokezo kuhusu nafasi za majina: Nafasi ya majina huwezesha kuhitimu lebo ya XML. Huwezi, kwa mfano, kuwa na vigezo viwili vilivyo na jina moja katika utaratibu mmoja, lakini ikiwa ni katika taratibu mbili tofauti, hakuna tatizo. Kwa hivyo, utaratibu ni nafasi ya majina, kwani majina yote ndani yake ni ya kipekee. Vile vile, vitambulisho vya XML vina upeo wao ndani ya nafasi za majina, kwa hivyo ukipewa nafasi ya majina na jina la lebo, unaweza kuitambua kwa njia ya kipekee. Tutafafanua nafasi ya majina kama URI ili kutofautisha NS1 yetu na nakala. Katika mfano hapo juu, NS1 ni lakabu inayoelekeza kwa urn:xmethods-quotes.

Pia makini na sifa ya encodingStyle - sifa hii huamua jinsi simu ya SOAP inavyosasishwa.

Ndani ya lebo ina vigezo. Katika kesi yetu rahisi, tuna parameter moja tu - tag . Angalia mstari huu karibu na lebo:
xsi:type="xsd:string"
Hii ni takriban jinsi aina zinavyofafanuliwa katika XML. (Ona jinsi nilivyotumia neno "takriban" kwa werevu nilipofanya majumuisho kuhusu teknolojia ambayo yanaweza kubadilika mara makala yanapochapishwa.) Hii inamaanisha nini hasa: aina iliyofafanuliwa katika nafasi ya majina ya xsi, ambayo utagundua imefafanuliwa kwenye tepe. -xsd: kamba. Na hii, kwa upande wake, ni kamba, iliyofafanuliwa katika nafasi ya majina ya xsd, tena, iliyofafanuliwa mapema. (Nina hakika wanasheria wangefurahishwa na haya yote).

Ndani ya lebo "IBM" imeonyeshwa. Hii ndio thamani ya kigezo cha ishara ya chaguo za kukokotoa za GetStockQuote.

Kweli, mwishowe, kama watu wenye heshima, tulifunga vitambulisho vyote.

Kwa hivyo tuligundua pakiti ya SABUNI ambayo inafafanua wito kwa seva ya SOAP. Na seva ya SOAP, kwa kutumia vichanganuzi vya XML, kitufe chekundu na kituo cha anga cha MIR, hutatua simu hii na kubainisha kuwa unahitaji bei ya hisa. Mara moja anapata nukuu sahihi na kukurejeshea katika fomu hii:
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>


34.5


Baada ya kufunua bahasha ya SABUNI, kurarua riboni na kuiba kanga, tunajifunza kuwa bei ya hisa ya IBM ni 34.5.

Seva nyingi za kibiashara zingerudisha taarifa zaidi, kama vile katika sarafu gani na kwa bei gani hisa ya mwisho ilinunuliwa. Na bei ya hisa, labda, ingekuwa sahihi zaidi.

Kwa njia hii tunajua nini seva ya SOAP inatarajia na itarudi nini. Kwa hivyo UNAtumaje habari hii? Unaweza kutumia usafiri wowote. Iliyofunikwa zaidi ni HTTP. Sitaingia kwa undani kuhusu HTTP, kwa wale ambao hawajui, ni kile kivinjari chako hutumia kuwasiliana na tovuti unazotembelea.

Ombi la HTTP linalohitajika litaonekana kama hii:
POST /StockQuote HTTP/1.1
Mwenyeji: www.stockquoteserver.com

Urefu wa Maudhui: nnnn
SOAPAction: "Baadhi ya URI"

Pakiti ya ombi la sabuni hapa... Jambo lingine pekee la kuzingatia ni kichwa cha SOAPAction. Kichwa hiki kinaonyesha madhumuni ya ombi na inahitajika. Kila seva ya SOAP inaweza kuwa na idadi isiyo na kikomo ya vitendakazi na inaweza kutumia kichwa cha SOAPAction ili kubaini ni kitendakazi gani kinachoitwa. Firewalls na multiplexers pia inaweza kuchuja maudhui kulingana na kichwa hiki.

Jibu la SOAP kutoka kwa seva ya HTTP litaonekana kama hii:
HTTP/1.1 200 Sawa
Aina ya Maudhui: maandishi/xml; charset="utf-8"
Urefu wa Maudhui: nnnn

Kifurushi cha Majibu ya Sabuni hapa... Kwa nini HTTP? Kwanza, wasimamizi wa mtandao hawatalazimika kufungua toni ya bandari tofauti kwa simu za SOAP... seva ya wavuti inaweza kushughulikia simu kwa urahisi, kwa sababu Port 80 huwa wazi kwa kila mtu kupokea maombi yanayoingia. Faida nyingine ni upanuzi wa seva za wavuti kwa kutumia CGI, ISAPI na moduli zingine asilia. Upanuzi huu hukuruhusu kuandika moduli inayochakata maombi ya SOAP bila kuathiri maudhui mengine ya wavuti.

Ni hayo tu

Natumai nakala hii ilisaidia kutoa mwanga juu ya SABUNI. Ikiwa bado uko hapa na unataka kusoma zaidi juu ya mada hii, tembelea tovuti ya waandishi: http://www.agnisoft.com/soap

Kwa ujumla, leo kuna itifaki za kubadilishana data za XML:

  • XML-RPC- unapitisha kifurushi na unaonyesha ni njia gani kwenye seva unayotaka kupiga simu.
  • PUMZIKA- kuna baadhi ya vitu kwenye seva. Kila kitu kina sifa ya aina fulani ya kitambulisho. Kila kipengele kina url yake. Unaweza kufanya zifuatazo kwa kipengele chochote: ingiza, futa, sasisha, chagua. Unatuma tu ombi linalohitajika kwa seva (kwa mfano, ingiza kitu kama hicho). Ubadilishanaji wa seva ya mteja unategemea ama JSON au XML.

SABUNI (usanifu unaoelekezwa kwa huduma, seti ya huduma zilizounganishwa bila mpangilio zinazoingiliana) inategemea RPC. Faida kuu ya RPC ni idadi ndogo ya rasilimali za mtandao (pointi za kuingia) na mbinu nyingi zinazohusika. Licha ya faida hii, RPC ni itifaki ya zamani ambayo ina shida kadhaa:

  • Uhalali wa ujumbe wa XML-RPC hauwezi kuthibitishwa. Itifaki ya zamani iliundwa kabla ya taratibu (mbinu za kuthibitisha data) kusanifishwa katika XML. Wale. Seva inakubali maombi, lazima ihakikishe kwamba maombi ni yake na kwamba data ni thabiti. Katika XML-RPC, aina za data zinatangazwa kwa hili, lakini hii ni hundi ya aina ya data, na uthabiti wa data haujaangaliwa (kwamba ulipokea muundo na vigezo vyote muhimu).
  • Huwezi kuunda jumbe zilizounganishwa.
  • Huwezi kutumia nafasi na wakati (ilionekana baada ya kuunda RPC).
  • Huwezi kupanua ujumbe, i.e. ongeza maelezo ya ziada.

Mapungufu haya yote yalitatuliwa katika Schema ya XML. Hiki ndicho kiwango cha sekta ya kuelezea hati ya XML. Wale. ni njia ya kuiga data kiholela. Ratiba ya XML inaweza kuelezea modeli (uhusiano kati ya vipengele na sifa, na muundo wao), aina za data (zinabainisha aina za data) na kamusi (majina ya vipengele na sifa).

Kulingana na mapungufu yote ya XML-RPC, itifaki ya SOAP iliundwa.

SABUNI(Itifaki ya Upatikanaji wa Kitu Rahisi) - itifaki ya kufikia kitu (kwa hatua ya kuingia). Leo ni kiwango kikuu cha tasnia ya ujenzi wa programu zilizosambazwa.

Inawakilisha viendelezi kwa lugha ya XML-RPC. Wale. imejengwa juu ya kanuni: 1 hatua ya kuingia na njia yoyote. Itifaki yenyewe katika suala la usafiri (jinsi ya kuhamisha data) inatoa chaguo pana: SMTP, FTP, HTTP, MSMQ.

SOAP inazingatia utekelezaji wa huduma za wavuti za XML (huduma za wavuti za XML). Hasara ya SABUNI ni kwamba ni vigumu kujifunza.

SOAP inategemea ubadilishanaji wa ujumbe kati ya mteja na seva (sawazisha na kwa usawa). Kila ujumbe hubeba taarifa kuhusu data (ni data gani inayotumwa na kupokea). SOAP inaelezea mapema muundo mzima wa ujumbe kwa kutumia schema za XML: nini kinapaswa kuwa katika ujumbe, jinsi itapitishwa. Hii inafanya uwezekano, bila kujua seva, kuelewa kinachotokea huko, na inaruhusu seva kuangalia ikiwa ujumbe huu ni wake.

Ratiba ya XML

Madhumuni ya schema ni kuelezea muundo wa data, i.e. tulichonacho. Data zote zimegawanywa katika aina rahisi na ngumu (scalar na miundo). Aina rahisi (kamba, nambari, boolean, tarehe) haitakuwa na chochote ndani. Na muundo (kitu) unaweza kuwa na mali.

Operesheni za msingi za SABUNI

  • Sio ubadilishanaji rahisi wa habari wa seva ya mteja. Lakini pia utambuzi wa seva moja kwa moja na utafute seva hii, i.e. mteja anaweza hata hajui chochote kuhusu seva. Wale. mteja kwanza hutafuta seva, hupata huduma zinazofaa, anaelewa ni njia gani zilizopo, seva ina nini, na kuiita.
  • Seva huchapisha maelezo yake (mahali, njia gani inasaidia) ili mteja apate seva hii. Uchapishaji hutokea kwenye saraka ya UDDI.

Muundo wa ujumbe wa SOAP:

  • Bahasha ya SABUNI - hii inajumuisha ujumbe mzima. Inajumuisha kichwa na mwili.
  • Kichwa cha SOAP (kichwa) - maelezo ya ziada (idhini, kwa mfano).
  • SABUNI Mwili (mwili) - ujumbe wenyewe.
  • Hitilafu ya SOAP (kosa) ni njia ya kusambaza kosa kutoka kwa seva hadi kwa mteja.

WSDL

WSDL(Lugha ya Maelezo ya Huduma za Wavuti) - lugha ya kuelezea huduma za wavuti. Inatumika katika SABUNI. Hii ni aina ya hati inayoelezea kila kitu: ni nafasi gani za majina zilitumiwa, ni mipango gani ya data iliyotumiwa, ni aina gani za ujumbe ambazo seva inatarajia kutoka kwa mteja, ni bahasha gani ni za njia gani, ni njia gani zilizopo, ni anwani gani ya kutuma, nk. . Kwa kweli, WSDL ni huduma ya wavuti. Inatosha kwa mteja kusoma yaliyomo kwenye hati hii; tayari anajua kila kitu kuhusu seva.

Seva yoyote lazima ichapishe WSDL.

WSDL ina vizuizi:

  • Ufafanuzi wa huduma yenyewe, i.e. hatua ya kuingia, bandari imeonyeshwa.
  • Njia za muundo. Hatua ya kuingia imeunganishwa na uendeshaji, i.e. inaunga mkono mbinu gani? Aina ya simu na njia ya maambukizi imeonyeshwa. Ndani ya kila njia kuna maelezo ya fomu ambayo data hupitishwa - kwa namna ya SOAP.
  • Mbinu za kuunganisha kwa ujumbe.
  • Maelezo ya ujumbe wenyewe.

Kama ilivyojadiliwa katika sura iliyotangulia, Huduma za Wavuti huwasiliana na wateja na kila mmoja kwa kutuma ujumbe katika XML. Lebo za utekelezaji huu wa XML, sheria za kuumbiza hati ya XML, na utaratibu wa kubadilishana hati hufafanuliwa na itifaki ya SOAP. Itifaki ya SOAP iliundwa mwaka wa 1998 na timu ya watengenezaji wakiongozwa na Dave Winer, ambaye alifanya kazi katika Microsoft Corporation na Userland. Jina la itifaki - "Itifaki ya Upatikanaji wa Kitu Rahisi" - inaonyesha madhumuni yake ya awali - kufikia mbinu za vitu vya mbali. Madhumuni ya itifaki yamebadilika; sasa ni itifaki ya mwingiliano wowote kati ya huduma za Wavuti na vijenzi vya programu zilizosambazwa ovyo ovyo. Sio rahisi tena, na haisemi chochote kuhusu vitu. Watengenezaji wengi wanapendekeza kuiita "Itifaki ya Usanifu Unaoelekezwa kwa Huduma", na kuacha ufupisho uliopita. Ili kukomesha majaribio haya, vipimo vya SOAP 1.2 vinasema kuwa neno "SOAP" halitasemwa tena kwa njia yoyote ile.

Mwisho wa 1999, maendeleo ya itifaki yalihamishiwa kwa muungano wa W3C (http:// www.w3.org/).

Mnamo Mei 2000, muungano huo ulitoa toleo lake la SOAP 1.1. Ujumbe ulioandikwa kwa kutumia itifaki ya SOAP umeumbizwa kama hati ya XML inayotumia nafasi za majina kikamilifu. SOAP 1.1 Majina ya vipengele vya XML hurejelea kitambulishi cha nafasi ya majina http://schemas.xmlsoap.org/soap/envelope/.

Rasimu ya pili ya SOAP 1.2 ilitolewa mwaka wa 2001, nafasi yake ya jina wakati huo iliitwa http://www.w3.org/2001/06/soap-envelope.

Kumbuka kuwa ni kitambulisho cha nafasi ya majina, si nambari 1.1 au 1.2, ambacho huamua toleo la SOAP. Seva haitazingatia ujumbe wa SOAP na itarudisha ujumbe wa hitilafu ikiwa itatambua

kutolingana kwa nafasi ya majina.

Ninapoandika haya, SOAP 1.1 inabaki kufanya kazi. Toleo la 1.2 haliwezi kuondoka kwenye hatua ya maandalizi, lakini tayari linatumika, kwa mfano, katika SOAP::Lite, Apache SOAP 2.3, Apache Axis. Kwa hiyo, katika sura hii nitaelezea toleo la 1.2, nikibainisha tofauti zake kutoka kwa toleo la 1.1.

Vipimo vya kufanya kazi vya SABUNI huhifadhiwa kila wakati katika http://www.w3.org/TR/SOAP/. Hati zilizo kwenye anwani hii hubadilishwa na mpya wakati toleo la kufanya kazi linabadilishwa.

Rasimu ya SOAP inasasishwa kila mara na kitambulishi cha nafasi ya majina hubadilika. Toleo la rasimu mpya zaidi wakati wa kuandika lilikuwa katika http://www.w3.org/TR/soapl2-partl/, na nafasi ya majina iliyotumika ilikuwa http://www.w3.org/2002/06/soap - bahasha. Kumbuka kuwa maelezo ya SOAP 12 yana sehemu mbili: sehemu ya 1 na sehemu ya 2. Sehemu ya pili ya vipimo - maombi - ina sheria za kurekodi aina za data ngumu. Uainishaji una sehemu nyingine ya partO - mifano ya ujumbe uliokusanywa kulingana na sheria za SOAP 1.2.

Muundo wa ujumbe wa SOAP

Vipimo vinafafanua ujumbe wa SOAP kama hati ya XML ambayo haina tamko la aina ya hati au maagizo ya kuchakata. Sehemu ya mizizi ya hati hii ya XML inaitwa . Kipengele kinaweza kuwa na sifa zinazofafanua nafasi za majina,

na sifa zingine zinazotolewa na viambishi awali. Kipengele kikuu kina kipengele kimoja cha hiari kilicho na kichwa cha ujumbe, na kipengele kimoja kinachohitajika , ambayo maudhui ya ujumbe yanarekodiwa. Toleo la 1.1 linaruhusiwa baada ya mwili ili kuandika vipengele vya kiholela, majina yao yalipaswa kuwa na viambishi awali. Toleo la 1.2 linakataza kuandika chochote baada ya kipengele . Kwa kifupi, muundo wa jumla wa ujumbe wa SOAP ni:

xmlns:env="http://www.w3.org/2002/06/soap-envelope">

< ! - Блоки заголовка ->

Kipengele

, ikiwa ni katika ujumbe, imeandikwa kwanza katika mwili wa kipengele . Kando na sifa za xmlns, inaweza kuwa na sifa ya mwigizaji, ambayo inaonyesha anwani ya URI ya seva mahususi ya SOAP ambayo ujumbe unakusudiwa.

Ukweli ni kwamba ujumbe wa SOAP unaweza kupitia seva kadhaa za SOAP au kupitia programu kadhaa kwenye seva moja. Programu hizi huchakata mapema kichwa cha ujumbe huzuia na kuusambaza kwa kila mmoja. Seva hizi zote na/au programu zinaitwa nodi za SOAP. Uainishaji wa SOAP haufafanui sheria za kupitisha ujumbe kupitia safu ya seva. Kwa kusudi hili, itifaki nyingine zinatengenezwa, kwa mfano, Microsoft WS-Routing.

Sifa ya mwigizaji hubainisha nodi inayolengwa ya SABUNI - ile ambayo iko mwisho wa mnyororo na itachakata kichwa kizima. Maana

Sifa ya muigizaji inaonyesha kuwa kichwa kitachakatwa na seva ya kwanza inayokipokea. Sifa ya mwigizaji inaweza kuonekana katika sehemu tofauti za vichwa, ikionyesha nodi inayoshughulikia kizuizi hiki. Baada ya usindikaji, kizuizi kinaondolewa kwenye ujumbe wa SOAP.

Katika toleo la 1.2, sifa ya mwigizaji inabadilishwa na sifa ya jukumu kwa sababu katika toleo hili la SOAP, kila nodi ina jukumu moja au zaidi. Vipimo kwa sasa vinafafanua majukumu matatu ya nodi za SOAP.

Jukumu la http://^^.w3.org/2002/06/soap-envelope/role/ultimateReceiver linachezwa na nodi ya mwisho, lengwa ambayo itachakata kichwa.

Jukumu http://www.w3.org/2002/06/soap-envelope/role/next linachezwa na nodi ya kati au lengwa. Node kama hiyo inaweza kucheza majukumu mengine, ya ziada.

Jukumu http://www.w3.org/2002/06/soap-envelope/role/none halipaswi kuchezwa na nodi yoyote ya SABUNI.

Programu zinazosambazwa, kulingana na mahitaji yao, zinaweza kuongeza majukumu mengine kwa majukumu haya, kwa mfano, kuanzisha seva ya kati ambayo inathibitisha sahihi ya dijiti na kufafanua jukumu hili kwa mfuatano fulani wa URI.

Thamani ya sifa ya jukumu inaweza kuwa kamba yoyote ya URI inayoonyesha jukumu la nodi ambayo kizuizi hiki cha kichwa kinakusudiwa. Thamani chaguo-msingi ya sifa hii ni thamani tupu, yaani, jozi tu ya nukuu, au mfuatano wa URI http://\vw\v.w3.org/2002/06/soap-envelope/rale/ultimateReceiver.

Thamani ya sifa ya jukumu inaonyesha kuwa kizuizi kinapaswa kuchakatwa na nodi inayocheza jukumu lililoainishwa na kamba sawa.

Kipengele kingine sifa

, inayoitwa urnstUnderstand, inachukua maadili o au 1. Thamani yake chaguomsingi ni o. Ikiwa sifa ya lazima ya kuelewa ni sawa na 1, basi node ya SOAP, wakati wa kusindika kipengele, lazima izingatie syntax yake iliyofafanuliwa kwenye schema ya hati, au usifanye ujumbe kabisa. Hii huongeza usahihi wa usindikaji wa ujumbe.

Katika toleo la SOAP 1.2, badala ya nambari o, unahitaji kuandika neno la uwongo, na badala ya nambari 1, andika neno kweli.

Katika mwili wa kichwa

Unaweza kuweka vipengee vya kiholela, ambavyo hapo awali viliitwa maingizo ya kichwa. Katika toleo la 1.2 hizi huitwa vitalu vya kichwa. Majina yao lazima yawe na viambishi awali. Vitalu vya vichwa vinaweza kuwa na jukumu au mwigizaji na sifa lazima zielewe. Hatua yao itatumika kwa kizuizi hiki pekee. Hii inaruhusu vizuizi vya vichwa vya kibinafsi kuchakatwa na nodi za kati za SOAP, zile ambazo jukumu lake linalingana na jukumu lililobainishwa na sifa ya jukumu. Orodha ya 3.1 inaonyesha mfano wa kizuizi kama hicho.

Kuorodhesha 3.1. Kichwa chenye kizuizi kimoja

xmlns:t="http://some.com/transaction" env:role=

"http://www.w3.org/2002/06/soap-envelope/role/ultimateReceiver" env:mustUnderstand="1">

Vipengele vilivyowekwa ndani ya vizuizi vya vichwa haviitwa tena vizuizi. Haziwezi kuwa na jukumu, mwigizaji, na sifa za lazima zielewe.

Kipengele lazima iandikwe mara baada ya kipengele

, ikiwa iko kwenye ujumbe, au kwanza kwenye ujumbe wa SOAP ikiwa kichwa kinakosekana. Kwa kipengele Unaweza kuweka vipengee vya kiholela; uainishaji haufafanui muundo wao kwa njia yoyote. Hata hivyo, kipengele kimoja kinafafanuliwa kina ujumbe wa makosa.

Ujumbe wa hitilafu

Ikiwa seva ya SOAP, wakati wa kusindika ujumbe wa SOAP uliopokea, unaona kosa, itaacha usindikaji na kutuma ujumbe wa SOAP kwa mteja, katika mwili ambao utaandika kipengele kimoja. na ujumbe wa makosa.

Katika ujumbe ulioandikwa kwenye mwili wa kipengele cha SOAP 1.1,

Kuna sehemu nne zilizoelezewa na viambajengo vifuatavyo.

Msimbo wa hitilafu - ujumbe unaoonyesha aina ya kosa. Imekusudiwa kwa programu inayoshughulikia makosa.

Maelezo ya kosa - maelezo ya mdomo ya aina ya makosa yaliyokusudiwa kwa mtu.

Ambapo kosa lilipatikana - URI ya seva iliyoona hitilafu. Inafaa wakati ujumbe unapitia msururu wa nodi za SOAP ili kufafanua asili ya hitilafu. Nodi za SABUNI za kati zinahitajika ili kurekodi kipengele hiki; seva inayolengwa ya SOAP haihitajiki kufanya hivyo.

Maelezo ya hitilafu - kuelezea makosa yaliyotokea katika mwili ujumbe, lakini sio katika kichwa chake. Ikiwa hakuna makosa yanayopatikana wakati wa usindikaji wa mwili, basi kipengele hiki hakipo.

Kwa mfano:

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

env:MustUnderstand SABUNI Lazima Ielewe Hitilafu

Toleo la 1.2 la SOAP lilibadilisha maudhui ya kipengele Kama ilivyoelezwa katika

namespace http://www.w3.org/2002/06/soap-envelope, inajumuisha vipengele viwili vinavyohitajika na vipengele vitatu vya hiari.

Vipengele vinavyohitajika.

Msimbo wa hitilafu . Ina kipengele kidogo kinachohitajika<:value>na msimbo wa hitilafu na kipengele kidogo cha hiari , yenye, tena, kipengele na kufafanua msimbo wa makosa na kipengele , na kisha kila kitu kinarudiwa kwa kurudia.

Sababu ya kosa . Ina sifa ya hiari ya xml: lang, inayoonyesha lugha ya ujumbe (ona Sura ya D), na idadi ya vipengee vilivyowekwa kiota vinavyoelezea hitilafu.

Vipengele vya hiari.

? - URI ya nodi ya kati ya SOAP ambayo iliona kosa.

? - jukumu la nodi ya SOAP ambayo iliona kosa.

? - maelezo ya kosa lililogunduliwa wakati wa kusindika mwili ujumbe, lakini sio kichwa cha habari.

Orodha ya 3.2 inaonyesha ujumbe wa hitilafu ambayo ilitokea wakati wa kujaribu kutekeleza utaratibu. Hitilafu ni kwamba majina ya hoja za utaratibu zimeandikwa vibaya katika ujumbe wa SOAP na utaratibu hauwezi kuzielewa.

Kuorodhesha 3.2. Ujumbe wa hitilafu

xmlns:env="http://www.w3.org/2002/06/soap-envelope" xmlns:rpc=’http://www.w3.org/2002/06/soap-rpc’>

env: Mtumaji

rpc:BadArgumentsc/env:Value>

Ptocessing ETror

xmlns:e="http://www.example.org/faults"> №mimi hailingani 999

Aina za makosa

Orodha ya misimbo ya makosa inabadilika kila wakati na inapanuka. Toleo la 1.1 linafafanua aina nne za makosa.

VersionMismatch - nafasi ya majina haitambuliki. Huenda imepitwa na wakati au jina lake halijaandikwa.

MustUnderstand - Kizuizi cha kichwa kilicho na alama ya sifa ya lazimaKuelewa chenye thamani ya 1 hakiambatani na sintaksia yake kama inavyofafanuliwa katika taratibu za hati.

Mteja - hati ya XML iliyo na ujumbe ina hitilafu na kwa sababu hii seva haiwezi kuichakata. Mteja anapaswa kubadilisha ujumbe.

Seva - seva haiwezi kuchakata ujumbe uliorekodiwa kwa usahihi kutokana na sababu zake za ndani.

Toleo la 1.2 linafafanua aina tano za makosa.

VersionMismatch - nafasi ya majina haitambuliki. Huenda imepitwa na wakati, au jina lake linaweza kuandikwa vibaya, au kunaweza kuwa na jina la kipengele cha XML katika ujumbe ambalo halijafafanuliwa katika nafasi hiyo ya majina. Seva huandika kipengele kwa kichwa cha majibu , kuorodhesha vipengele vilivyowekwa majina sahihi ya nafasi ya majina yanayoeleweka na seva. Jibu la seva linaonyeshwa katika Orodha 3.3.

MustUnderstand - Kizuizi cha kijajuu kilicho na sifa ya lazima kieleweke kilichowekwa kuwa kweli hakiambatani na sintaksia yake kama inavyofafanuliwa katika taratibu za hati. Seva huandika vitu vifuatavyo kwa kichwa cha majibu: , ambaye sifa ya qname ina jina la kizuizi kisicho sahihi. Orodha ya 3.4 ina mfano wa jibu ambalo seva ingetoa ikiwa kichwa katika Orodha ya 3.1 kiliandikwa kimakosa.

DataEncodingUnknown - ujumbe ulikuwa na data isiyoeleweka, labda iliandikwa kwa encoding isiyojulikana.

Mtumaji - hati ya XML iliyo na ujumbe ina hitilafu na kwa sababu hii seva haiwezi kuichakata. Mteja anapaswa kubadilisha ujumbe.

Kipokeaji - seva haiwezi kuchakata ujumbe uliorekodiwa kwa usahihi kwa sababu zake za ndani, kwa mfano, kichanganuzi kinachohitajika cha XML hakipo.

Seva inaweza kuongeza baadhi ya aina zake kwa aina hizi za makosa. Kwa kawaida

wanafafanua aina za kawaida na ujumbe kuzihusu huonekana katika vipengele , kama inavyoonyeshwa hapo juu katika Orodha 3.2.

? Kuorodhesha 3.3. Majibu ya seva yenye ujumbe wa hitilafu kama VersionMismatch

xmlns:env="http://www.w3.org/2002/06/soap-envelope">

xmlns:upg="http://www.w3.org/2002/06/soap-upgrade">

xmlns:nsl="http://www.w3.org/2002/06/soap-envelope"/>

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

env:VersionMismatch

Toleo Lisilolingana

ListingZ.4. Jibu la seva na ujumbe wa makosa kama MustUnderstand

xmlns:t=’http://some.com/transaction’ />

env:MustUnderstand

Kijajuu kimoja au zaidi cha lazima hakijaeleweka

Fasihi:

Khabibullin I. Sh. Maendeleo ya huduma za Mtandao kwa kutumia Java. - St. Petersburg: BHV-Petersburg, 2003. - 400 p.: mgonjwa.