Koje godine su se pojavili web servisi sapuna. Listing klase PersonServiceImpl

Sa evolucijom Interneta, pojavila se potreba za stvaranjem distribuiranih aplikacija. Aplikacije instalirane na računaru obično koriste biblioteke koje se nalaze na njemu. Nekoliko programa može koristiti jednu biblioteku. Mogu li se analozi biblioteka postaviti na Internet tako da ih različite stranice mogu pozivati? Ispostavilo se da da.

Preduzeća na svojim stranicama pružaju razne informacije. Na primjer, sa svoje web stranice http://www.Ford.com kompanija Ford objavljuje informacije o modelima i cijenama. Diler ove kompanije želi da ima ove informacije i na svojoj web stranici. Web usluga omogućava web lokaciji potrošača da preuzme informacije sa stranice dobavljača. Potrošačka stranica prikazuje ove informacije na svojim stranicama. Kod za generiranje ovih informacija napisan je jednom, ali ga mnogi potrošači mogu koristiti. Podaci su predstavljeni u običnom tekstu, tako da se mogu koristiti bez obzira na platformu.

Web usluge se široko koriste u aplikacijama za desktop i Internet. One nisu same aplikacije, već izvori podataka za aplikacije. Oni su nestali korisnički interfejs... Web servisi se ne moraju koristiti preko mreže – oni mogu biti dio projekta u kojem se koriste.

Web usluge su funkcionalnost i podaci koji se pružaju za korištenje od strane vanjskih aplikacija koje komuniciraju sa uslugama putem standardnih protokola i formata podataka. Web servisi su potpuno nezavisni od jezika i platforme. Tehnologija web usluga je kamen temeljac Microsoftovog modela programiranja. NET.

Ovo dalji razvoj programiranje komponenti CORBA i DCOM. Međutim, da bi se takve komponente koristile, potrebno ih je registrovati u sistemu potrošača. Ovo nije potrebno za web usluge. Komponente dobro rade na lokalnim mrežama. HTTP nije protokol za poziv udaljene procedure (RPC). Čak i unutar iste organizacije, različite OS koji mogu komunicirati samo preko HTTP-a.

Učinjeno je nekoliko pokušaja da se stvori jezik komunikacije između heterogenih sistema - DCOM, CORBA, RMI, IIOP. Nisu dobili opću distribuciju, jer su svaki od njih promovirali različiti proizvođači i stoga je bio vezan za tehnologije određenog proizvođača. Niko nije hteo da prihvati tuđe standarde. Da bi se prevazišla ova dilema, nekoliko kompanija se složilo da razviju standard neutralan prema dobavljačima za razmenu poruka preko HTTP-a. U maju 2000. IBM, Microsoft, HP, Lotus, SAP, UserLand i drugi pristupili su W3C-u i iznijeli SOAP kao kandidata za takav standard. SOAP je napravio revoluciju u razvoju aplikacija objedinjavajući dva Internet standarda, HTTP i XML.

SOAP

Za interakciju s web uslugama koristi se SOAP protokol baziran na XML-u. Možete koristiti samo XML, ali ovo je previše labav format, u kojem svaki dokument zapravo kreira svoj jezik. SOAP je konvencija o formatu XML dokumenta, o prisustvu određenih elemenata i imenskih prostora u njemu.

SOAP vam omogućava da objavite i koristite složene strukture podataka kao što je DataSet. Istovremeno, lako se uči. Trenutna verzija SAPUN - 1.2.

SOAP je skraćenica od Simple Object Access Protocol. SOAP je dizajniran da aplikacijama olakša komunikaciju preko HTTP-a. To je specifičan format nezavisan od platforme za razmjenu poruka putem Interneta. SOAP poruka je običan XML dokument. Standard

Lirski dio.

Zamislite da ste implementirali ili implementirate određeni sistem koji bi trebao biti dostupan izvana. One. postoji određeni server sa kojim trebate komunicirati. Na primjer web server.

Ovaj server može obavljati mnoge radnje, raditi sa bazom podataka, izvršavati neke zahtjeve trećih strana prema drugim serverima, uključivati ​​se u neku vrstu proračuna itd. živjeti i eventualno razvijati prema svom dobro poznatom scenariju (tj. prema scenariju programera). Osoba nije zainteresirana za komunikaciju s takvim serverom, jer možda neće biti u mogućnosti / htjeti dati lijepe stranice sa slikama i drugim sadržajem prilagođenim korisnicima. Napisan je i radi da bi radio i izdavao podatke na zahtjeve prema njemu, ne mareći da su oni čitljivi, klijent će se sam baviti njima.

Drugi sistemi, koji se odnose na ovaj server, već mogu raspolagati podacima primljenim sa ovog servera po sopstvenom nahođenju - da obrađuju, akumuliraju, izdaju svojim klijentima itd.

Pa, jedna od opcija za komunikaciju sa takvim serverima je SOAP. SOAP xml protokol za razmjenu poruka.

Praktični dio.

Web servis (ovo je ono što server pruža i što klijenti koriste) omogućava komunikaciju sa serverom u jasno strukturiranim porukama. Činjenica je da web servis ne prihvata nikakve podatke. Na svaku poruku koja nije u skladu s pravilima web servis će odgovoriti greškom. Greška će, inače, biti i u obliku xml sa jasnom strukturom (što nije tačno za tekst poruke).

WSDL (jezik opisa web usluga). Na isti način su opisana i pravila po kojima se sastavljaju poruke za web servis koristeći xml i takođe imaju jasnu strukturu. One. ako web usluga pruža mogućnost pozivanja metode, trebala bi obavijestiti klijente koji se parametri koriste za ovu metodu. Ako web usluga očekuje string za metodu Method1 kao parametar i string mora biti nazvan Param1, tada će ova pravila biti navedena u opisu web usluge.

Kao parametri mogu se proslijediti ne samo jednostavni tipovi, već i objekti, kolekcije objekata. Opis objekta se svodi na opis svake komponente objekta. Ako se objekt sastoji od nekoliko polja, tada se svako polje opisuje koji tip, ime (koje moguće vrijednosti). Polja mogu biti i složenog tipa, i tako sve dok se opis tipova ne završi jednostavnim - string, boolean, broj, datum... Međutim, neki specifični tipovi mogu se pokazati jednostavnima, važno je da klijenti mogu razumjeti koje vrijednosti mogu biti sadržane u njima.

Za klijente je dovoljno znati url web servisa, wsdl će uvijek biti tu, pomoću kojeg možete dobiti predstavu o metodama i njihovim parametrima koje ovaj web servis pruža.

Koje su prednosti svih ovih zvona i zviždaljki:

  • U većini sistema, opis metoda i tipova se javlja u automatski način rada... One. dovoljno je da programer na serveru to kaže ovu metodu može se pozvati putem web servisa, a wsdl opis će se automatski generirati.
  • Dobro strukturiran opis može pročitati svaki sapun klijent. One. bez obzira na web uslugu, klijent će razumjeti koje podatke web servis prihvata. Prema ovom opisu, klijent može izgraditi vlastitu internu strukturu klasa objekata, tzv. binding "i. Kao rezultat toga, programer koji koristi web servis mora napisati nešto poput (pseudokoda):

    NewUser: = TSoapUser.Create ("Vasya", "Pupkin", "odmin"); soap.AddUser (NewUser);

  • Automatska validacija.

    • xml validacija. xml mora biti dobro formiran. neispravan xml - odmah greška klijentu, neka to shvati.
    • validacija šeme. xml mora imati specifičnu strukturu. xml ne odgovara shemi - odmah greška klijentu, neka shvati.
    • Validaciju podataka vrši sapun-server tako da tipovi podataka, ograničenja odgovaraju opisu.
  • Autorizacija i autentifikacija se mogu implementirati zasebna metoda... nativno. ili korištenjem http autorizacije.
  • Web servisi mogu raditi i preko sapun protokola i preko http, odnosno putem get zahtjeva. To jest, ako su parametri jednostavni podaci (bez strukture), onda možete jednostavno pozvati uobičajeni get www.site.com/users.asmx/GetUser?Name=Vasia ili post. Međutim, to nije svugdje i ne uvijek.
  • ... vidi wikipediju

Ima i dosta minusa:

  • Nerazumno velika veličina poruke. Pa, ovdje je sama priroda xml-a takva da je format suvišan, što je više oznaka, to su beskorisnije informacije. Osim toga, sapun dodaje vlastitu redundantnost. Za intranet sisteme, problem saobraćaja je manje akutan nego za internet, pa zato lokalne mreže traženiji, posebno Sharepoint ima sapun web servis s kojim možete uspješno (i uz određena ograničenja) komunicirati.
  • Automatska promjena opisa web usluge može pokvariti sve klijente. Pa to je kao za svaki sistem, ako nije podržana kompatibilnost sa starim metodama, sve će pasti...
  • Nije minus, nego mana. Sve akcije za pozivanje metoda moraju biti atomske. Na primjer, radeći s pododjeljkom, možemo pokrenuti transakciju, izvršiti nekoliko zahtjeva, a zatim vratiti ili izvršiti. Nema transakcija u sapunu. Jedan zahtjev, jedan odgovor, razgovor je završen.
  • Može biti prilično teško razumjeti opis onoga što je na strani servera (da li sam ja sve ispravno opisao?), šta je na klijentu (šta mi je ovdje napisano?). Bilo je nekoliko puta kada sam morao da se nosim sa klijentskom stranom, i da ubeđujem serverskog programera da su njegovi podaci pogrešno opisani, a on uopšte nije mogao da razume ništa, jer automatsko generisanje, a on, takoreći, ne bi trebalo, ovo je softversko poslovanje. A greška je prirodno bila u kodu metode, programer je jednostavno nije vidio.
  • Praksa pokazuje da su programeri web servisa užasno udaljeni od ljudi koji koriste ove web servise. Kao odgovor na bilo koji zahtjev (važeći izvana), može doći do nerazumljive greške "Greška 5. Sve je loše". Sve zavisi od savesti programera :)
  • Verovatno se još uvek nečega nisam setio...

Kao primjer, tu je otvoreni web servis belavia:

  • http://86.57.245.235/TimeTable/Service.asmx - ulazna tačka, tu je i tekstualni opis metoda za programere treće strane.
  • http://86.57.245.235/TimeTable/Service.asmx?WSDL - wsdl opis metoda i tipova primljenih i vraćenih podataka.
  • http://86.57.245.235/TimeTable/Service.asmx?op=GetAirportsList - opis određene metode sa primjerom xml zahtjeva i xml odgovora.

Možete ručno kreirati i poslati zahtjev poput:

POST /TimeTable/Service.asmx HTTP / 1.1 Host: 86.57.245.235 Content-Type: text / xml; charset = utf-8 Content-Length: dužina SOAPAction: "http://webservices.belavia.by/GetAirportsList" ru

odgovor ce stici:

HTTP / 1.1 200 OK Datum: Pon, 30 Sep 2013 00:06:44 GMT Server: Microsoft-IIS / 6.0 X-Powered-By: ASP.NET X-AspNet-Verzija: 4.0.30319 Cache-Control: privatno, max -age = 0 Tip sadržaja: tekst / xml; charset = utf-8 Dužina sadržaja: 2940

Shl Ranije je otvoren Aeroflot web servis, ali nakon što je 1C dodao podršku za sapun na 8k, gomila 1c beta testera uspješno ga je poništila. Sad se tu nešto promijenilo (ne znam adrese, možete potražiti ako ste zainteresovani).
ZZY Odricanje od odgovornosti. Rekao mi je na nivou domaćinstva. Možeš da šutiraš.

Odricanje od odgovornosti:Napisano je dosta članaka na ovu temu i, kao što ste, naravno, pretpostavili, ovo je sljedeći. Možda ćete iz toga naučiti nešto novo, ali ništa super-tajno što sami ne biste mogli proguglati nije ovdje opisano. Samo napomene iz ličnog iskustva.

Uvod

Razmotrit ćemo samo situaciju kada postoji web servis treće strane i zadatak je uspostaviti razmjenu podataka.

Struktura usluge je opisana u datoteci WSDL(jezik opisa engleskog web servisa)

Datoteka je najčešće dostupna sa linka na kojem se nalazi ulazna tačka u sam web servis. Napisao sam "najčešće" jer ima izuzetaka. Na primjer, web-usluga zasnovana na SAP-u ne objavljuje wsdl i može se dobiti samo istovarom iz same aplikacije.

I tako, imamo opis web servisa, login, lozinku. Hajde da se povežemo.

// Definirajte URLServiceNameSpace settings = "http://Somesite.ru"; Korisničko ime = "TestUser"; Lozinka = "q1w2e3"; LocationWSDL = "https://Somesite.ru/WebService/Some?wsdl"; ServiceName = "SomeServiceName"; ConnectionPointName = "SomeService_Port"; // Kreiraj SSL vezu = New SecureConnection OpenSSL (); WSDefinition = Nova WSDefinicija (LocationWSDL, SSL); WSProxy = Novi WSProxy (WSDefinition, ServiceNameSpace URL, ServiceName, ConnectionPointName, SSL); WSProxy.User = Korisničko ime; WSProxy.Password = Lozinka;

Fino! Povezali smo se na web servis! U teoriji, ovo je osnova svake opcije razmjene, jer vam omogućava da kreirate objekt strukture podataka baziran na wsdl-u, a rad sa takvim objektom je zadovoljstvo.

Uzmite u obzir XML koji nam daje SoapUI

357 121212 M 19900111 Mercedes GLS Audi TT

Hajde da to opišemo programski

// Kreirajte objekat i popunite ga podacima XDTOFactory = WSDefinition.XDTOFactory; RootType = CustomXDTO.Type (URL ServiceNameSpace, "SUBMISSION"); RootObject = MyXDTOFactory.Create (RootType); RootObject.ID = "4356"; ClientType = CustomXDTO.Type (URL ServiceNameSpace, "CUSTOMER"); ClientObject = OwnXDTOFactory.Create (ClientType); ClientObject.CLIENT_ID = "121212"; ClientObject.SEX = "M"; // F - ženski, M - muški ClientObject.CLIENT_BIRTHDAY = "19900111"; // Automobili klijenata AutoType = OwnFactoryXDTO.Type (URLServiceNameSpace, "CARS"); AutoObject = OwnXDTOFactory.Create (AutoType); AutoObject.CLASS = "Mercedes"; AutoObject.MODEL = "GLS"; ClientObject.CARS.Add (AutoObject); AutoObject = OwnXDTOFactory.Create (AutoType); AutoObject.CLASS = "Audi"; AutoObject.MODEL = "TT"; ClientObject.CARS.Add (AutoObject); RootObject.CUSTOMER.Add (ClientObject);

Podaci su uspješno popunjeni. Sada ih trebate poslati.

U ovom trenutku se pojavljuju mnoge nijanse. Pokušajmo razmotriti svaki.

Recept 1. Slanje cijelog XDTO objekta

Rezultat = WSProxy.AddCustomers (RootObject);

Ostaje samo da obradimo rezultat koji nam je usluga vratila i to je to. Slažem se da je ovo vrlo zgodno!

Ali u praksi to nije uvijek slučaj. Na primjer, 1c se ne slaže sa prefiksiranjem određenih oznaka unutar xml-a kada se imenski prostor korijenske oznake razlikuje od onog djece. U takvim slučajevima morate ručno skupljati sapun. Morao sam se baviti i web servisima koji čekaju čisti xml kao parametar. Ludilo, ali to ipak nije preteško.

Recept 2. Slanje čistog xml-a kao parametra

XMLWriteParameters = Novi XMLWriterParameters ("UTF-8", "1.0", True); MyXML = Novi XML zapis; MyXML.SetString (Opcije XMLWriter); MyXML.WriteXMLDeclaration (); MyXDTOFactory.WriteXML (MyXML, RootObject); XML string = MyXML.Close (); Ako DeleteNamespaceDescription onda pokušaj FirstTagVSRow = StrGetString (XMLString, 2); RootTagName = RootObject.Type ().Naziv; XMLString = StringReplace (XMLString, FirstTagVS string, "<"+ИмяКорневогоТэга+">"); Izuzetak // DescriptionErrors () EndTry; EndIf; Rezultat = WSProxy.AddCustomers (XML string);

Ako ne uklonite prostor imena koji 1c dodaje po defaultu, onda je on postao više od 5 linija koda. Češće nego ne, ja umotavam xml konverziju u funkciju, pošto obično pozivam više metoda.

Recept 3. Slanje izvornog HTTP zahtjeva.

StringSOAP = " | | | "+ XML string +" | |"; // Opišite zaglavlja HTTP zahtjeva Headers = New Match; Headers.Insert (" Content-Type "," text / xml; charset = UTF-8 "); Headers.Insert (" SOAPAction "," http: // sap.com/xi/WebService/soap1.1 "); Headers.Insert (" Autorizacija "," Basic "+ GetBase64AuthorizationHeader (korisničko ime, lozinka)); // PAŽNJA !!! // Ne možete programski popuniti sljedeća zaglavlja, jer to dovodi do greške // Platforma će ih ispravno popuniti // Zaglavlja. ČG = ")); // dužina poruke // Zaglavlja. Ubaci ("Host", "Somesite.ru:8001") ; // Headers. Insert ("Connection "," Keep-Alive "); // Headers. Insert ("User-Agent", "Apache-HttpClient / 4.1.1 (java 1.5)"); // Povežite se na Veza = Nova HTTPConnection ("Somesite.ru/WebService/Some", Korisničko ime, Lozinka, SSL, False); // Adresa mora biti bez https: // // Dobiti tekst osnovne stranice putem POST zahtjeva HTTP zahtjev c = Novi HTTPRequest ("/ GetCustomer", zaglavlja); HTTPRequest.SetBodyFromString (StringSOAP); Rezultat = Connection.CallHTTPmethod ("POST", HTTPRequest);

U ovom slučaju, sapun ćemo morati sakupljati ručno. U stvari, mi samo umotamo xml iz recepta 2 u ljusku sapuna, gdje, ovisno o zahtjevima web servisa, možemo mijenjati naš sapun kako želimo.

Zatim opisujemo zaglavlja prema dokumentaciji. Neki servisi će mirno prožvakati naš zahtjev bez zaglavlja, ovdje morate pogledati konkretan slučaj. Ako ne znate koja zaglavlja napisati, onda je najlakši način da špijunirate zahtjev u SoapUI prelasku na karticu RAW.

Funkcija za dobijanje Base64 stringa izgleda ovako (špijunirano):

Funkcija GetBase64AuthorizationHeader (korisničko ime, lozinka) FileCoding = TextCode.UTF8; TemporaryFile = GetTemporaryFileName (); Zapis = Novi tekstualni zapis (TemporaryFile, FileCode); Record.Record (Korisničko ime + ":" + Lozinka); Record.Close (); DWData = Novi binarni podaci (TemporaryFile); Rezultat = Base64String (DWData); DeleteFiles (TemporaryFile); Rezultat = Prosjek (Rezultat, 5); Refund Result; EndFunction

Postoji važna stvar. Kada radite sa HTTPConnection, navedite adresu bez navođenja protokola "http: //" i "https: //", inače rizikujete da gubite vrijeme tražeći očiglednu grešku.

Recept 4. Slanje preko WinHttpRequest

WinHttp = Novi COMObject ("WinHttp.WinHttpRequest.5.1"); WinHttp.Opcija (2, "UTF-8"); WinHttp.Option (4, 13056); // intSslErrorIgnoreFlag WinHttp.Option (6, istina); // blnEnableRedirects WinHttp.Option (12, istina); // blnEnableHttpsToHttpRedirects WinHttp.Open ("POST", "https://Somesite.ru/WebService/Some/GetCustomer", 0); WinHttp.SetRequestHeader ("Content-type", "text / xml"); WinHttp.SetCredentials (korisničko ime, lozinka, 0); WinHttp.Send (String SOAP); WinHttp.WaitForResponse (15); XMLResponse = WinHttp.ResponseText ();

Ovdje, u suštini, isto kao u prethodnoj verziji, ali radimo sa COM objektom. Navodimo niz veze u cijelosti, zajedno sa protokolom. Posebnu pažnju treba obratiti samo na ignoriranje oznaka greške SSL certifikata. Potrebni su ako radimo na SSL-u, ali bez određenog certifikata, jer u ovoj opciji nije moguće napraviti novu sigurnu vezu (ili ne znam kako). Ostatak mehanizma je sličan prethodnom.

Takođe, pored "WinHttp.WinHttpRequest.5.1", možete koristiti "Microsoft.XMLHTTP", "Msxml2.XMLHTTP", "Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP.6.0", ako odjednom ne potraje isključeno na WinHttp. Metode su skoro iste, samo je broj parametara različit. Pretpostavljam da je jedna od ovih opcija tvrdo kodirana unutar 1c HTTPRequest objekta.

Trenutno, ovo su svi recepti koje imam. Ako naiđem na nove, svakako ću dopuniti članak.

Obrada rezultata

U receptu 1 najčešće dobijamo gotov XDTO objekat i radimo sa njim kao sa strukturom. U svim ostalim slučajevima, možete pretvoriti xml odgovor u XDTO

Ako je Result.StatusCode = 200 Tada je XMLReader = Novi XMLReader; ReadXML.SetString (Result.GetBodyAsString ()); ObjectResponse = OwnXDTOFactory.ReadXML (ReadXML); Izvještaj (ObjectResponse.Body.Response.RESPONSE_ID); Izvještaj (ObjectResponse.Body.Response.RESPONSE_TEXT); EndIf;

Ovdje je sve jednostavno.

Umjesto zaključka

1. Počnite raditi sa web servisima sa SoapUI programom. Dizajniran je za takav rad i omogućit će vam da brzo shvatite kako određena usluga funkcionira. Postoji članak za savladavanje

2. Ako razmjenjujete sa servisom preko nezaštićenog http kanala i postavlja se pitanje šta tačno 1c šalje u vašim porukama, onda možete koristiti njuškare prometa kao što su Wireshark, Fiddler i drugi. Problem će nastati samo ako koristite ssl vezu.

3. Ako, ipak, web usluga komunicira putem https, tada na udaljeni stroj (bilo koji, glavna stvar nije na nama) stavljamo Nginx server, na koji ćemo kontaktirati, a on će se pakirati sve u https i pošaljite gdje je potrebno ( obrnuti proxy ) i dodajte u standardnu ​​konfiguraciju:

Server (slušajte 0.0.0.0:8080; server_name MyServer; lokacija ~. * (Proxy_pass https://Somesite.ru:8001; proxy_set_header Host $ host; proxy_set_header Autorizacija "Basic "; proxy_pass_header Autorizacija;))

5. Ako autentifikacija uključuje korištenje kolačića, tada je pronađeno sljedeće

P.S. Ako imate pitanja, sugestije za poboljšanje koda, imate svoje recepte koji se razlikuju od opisanih, pronašli ste greške ili mislite da je autor "sjajan" i da mu "nije mjesto u 1c", onda napišite komentare i mi ćemo raspravljati o svemu.

Naslov teme je zaista pitanje, jer Ni sam ne znam šta je to i po prvi put ću pokušati s tim raditi u okviru ovog članka. Jedina stvar koju mogu garantirati da će kod u nastavku raditi, ali moje fraze će biti samo pretpostavke i nagađanja o tome kako ja sam sve ovo razumijem. pa idemo...

Uvod

Moramo početi od onoga zbog čega je kreiran koncept web servisa. U vrijeme kada se ovaj koncept pojavio, u svijetu su već postojale tehnologije koje su omogućavale interakciju aplikacija na daljinu, gdje je jedan program mogao pozvati neku metodu u drugom programu, koji se istovremeno mogao pokrenuti na računaru koji se nalazi u drugom gradu ili čak zemlja. Sve ovo je skraćeno RPC (Remote Procedure Calling). Primjeri uključuju CORBA tehnologije, a za Javu - RMI (Remote Method Invoking). I čini se da je sve u njima dobro, posebno u CORBI, tk. možete raditi s njim u bilo kojem programskom jeziku, ali nešto je ipak nedostajalo. Vjerujem da je nedostatak CORBA-e to što djeluje kroz neke svoje mrežni protokoli umjesto jednostavnog HTTP-a, koji će puzati kroz bilo koji zaštitni zid. Ideja iza web servisa je bila kreiranje RPC-a koji bi se zalijepio u HTTP pakete. Tako je započeo razvoj standarda. Koji su osnovni koncepti ovog standarda:
  1. SOAP... Prije pozivanja udaljene procedure, morate opisati ovaj poziv XML fajl e SOAP format. SOAP je jednostavno jedna od mnogih XML oznaka koje se koriste u web servisima. Sve što želimo negdje poslati putem HTTP-a prvo se pretvara u XML SOAP opis, zatim se stavlja u HTTP paket i šalje na drugi računar na mreži putem TCP/IP-a.
  2. WSDL... Postoji web servis tj. program čije metode se mogu pozvati na daljinu. Ali standard zahtijeva da se uz ovaj program priloži opis koji kaže da "da, niste pogriješili - ovo je zaista web servis i iz njega možete pozvati takve i takve metode." Ovaj opis je predstavljen drugom XML datotekom koja ima drugačiji format, naime WSDL. One. WSDL je samo XML opisna datoteka za web servis i ništa drugo.
Zašto pitaš tako kratko? Ne možete dobiti više detalja? Vjerovatno možete, ali za ovo se morate obratiti knjigama poput Mashnin T. "Java Web Services". Tamo ide prvih 200 stranica Detaljan opis svaka oznaka SOAP i WSDL standarda. Da li da to uradim? Po mom mišljenju, ne, tk. sve ovo se automatski generiše u Javi, a sve što treba da uradite je da napišete sadržaj metoda koje bi trebalo da budu pozvane sa daljine. Dakle, u Javi je postojao takav API kao što je JAX-RPC. Ako neko ne zna, kada kažu da Java ima taj i takav API, to znači da postoji paket sa skupom klasa koje inkapsuliraju dotičnu tehnologiju. JAX-RPC je evoluirao od verzije do verzije dugo vremena i na kraju je evoluirao u JAX-WS. WS je očigledno skraćenica za WebService i mogli biste pomisliti da je ovo jednostavno preimenovanje RPC-a u popularnu riječ ovih dana. Ovo nije slučaj, pošto Sada su web servisi odmakli od prvobitne ideje i omogućavaju vam ne samo pozivanje udaljenih metoda, već i jednostavno slanje poruka dokumenata u SOAP formatu. Zašto je to potrebno, još ne znam, malo je vjerovatno da će odgovor biti "za svaki slučaj, odjednom će zatrebati". I sam bih volio da učim od iskusnijih drugova. I posljednja stvar, tu je bio i JAX-RS za takozvane RESTful web servise, ali to je tema za poseban članak. Na ovom mjestu uvod se može završiti, jer sljedeće ćemo naučiti raditi sa JAX-WS.

Opšti pristup

Web servisi uvijek imaju klijenta i servera. Server je naš web servis i ponekad se naziva krajnja tačka (poput krajnje tačke gde odlaze SOAP poruke od klijenta). Moramo uraditi sljedeće:
  1. Opišite sučelje naše web usluge
  2. Implementirajte ovaj interfejs
  3. Pokrenite našu web uslugu
  4. Napišite klijenta i daljinski pozovite traženu metodu web usluge
Web servis se može pokrenuti Različiti putevi: ili deklarirajte klasu sa main metodom i pokrenite web uslugu direktno kao server, ili je postavite na server kao što je Tomcat ili bilo šta drugo. U drugom slučaju, mi sami ne trčimo novi server i ne otvarajte drugi port na računaru, već jednostavno recite Tomcat servlet kontejneru da "smo napisali klase web servisa ovdje, objavite ih, molim vas, tako da svi koji vas kontaktiraju mogu koristiti našu web uslugu." Bez obzira na način pokretanja web servisa, mi ćemo imati istog klijenta.

Server

Započnimo IDEA i kreirajmo novi projekat Kreirajte novi projekat... Hajde da unesemo ime HelloWebService i pritisnite dugme Sljedeći, zatim dugme Završi... U folderu src kreirajte paket ru.javarush.ws... U ovom paketu ćemo kreirati sučelje HelloWebService: paket ru. javarush. ws; // ovo su napomene, tj. način da označimo naše klase i metode, // u vezi s tehnologijom web usluga import javax. jws. WebMethod; import javax. jws. WebService; import javax. jws. sapun. SOAPBinding; // kažemo da će naš interfejs raditi kao web servis@WebService // kažemo da će se web servis koristiti za pozivanje metoda@SOAPBinding (style = SOAPBinding. Style. RPC) javni interfejs HelloWebService ( // kažemo da se ova metoda može pozvati na daljinu@WebMethod public String getHelloString (ime stringa); ) U ovom kodu, klase WebService i WebMethod su takozvane napomene i ne rade ništa osim što označavaju naš interfejs i njegovu metodu kao web servis. Isto vrijedi i za klasu SOAPBinding. Jedina razlika je u tome što je SOAPBinding oznaka parametra. V u ovom slučaju parametar style se koristi sa vrijednošću koja kaže da web servis neće raditi kroz poruke dokumenta, već kao klasični RPC, tj. za pozivanje metode. Hajde da implementiramo logiku našeg interfejsa i kreiramo klasu HelloWebServiceImpl u našem paketu. Inače, napominjem da je kraj klase u Impl-u konvencija u Javi, prema kojoj se implementacija interfejsa označava na ovaj način (Impl - od riječi implementacija, tj. implementacija). Ovo nije uslov i slobodno možete da imenujete klasu kako god želite, ali pravila dobre forme to zahtevaju: paket ru. javarush. ws; // ista napomena kao kod opisa interfejsa, import javax. jws. WebService; // ali se ovdje koristi s parametrom endpointInterface, // navodeći potpuno kvalificirano ime klase sučelja naše web usluge@WebService (endpointInterface = "ru.javarush.ws.HelloWebService") javna klasa HelloWebServiceImpl implementira HelloWebService (@Override public String getHelloString (ime stringa) ( // samo vrati pozdrav vrati "Zdravo," + ime + "!" ; )) Pokrenimo naš web servis kao nezavisni server, tj. bez uključivanja Tomcat-a i aplikacijskih servera (ovo je tema za posebnu raspravu). Da biste to učinili, u strukturi projekta u fascikli src hajde da kreiramo paket ru.javarush.endpoint, iu njemu kreiramo HelloWebServicePublisher klasu sa main metodom: package ru. javarush. krajnja tačka; // klasa za pokretanje web servera s web uslugama import javax. xml. ws. Krajnja tačka; // klasa našeg web servisa import ru. javarush. ws. HelloWebServiceImpl; javna klasa HelloWebServicePublisher (javni statički void main (String... args) ( // pokretanje web servera na portu 1986 // i na adresi navedenoj u prvom argumentu, // pokreće web servis proslijeđen u drugom argumentu Krajnja tačka. objaviti ( "http: // localhost: 1986 / wss / hello", novi HelloWebServiceImpl ()); )) Sada pokrenimo ovu klasu klikom Shift + F10... Ništa se ne pojavljuje na konzoli, ali server radi. Ovo možete provjeriti tako što ćete u pretraživač upisati red http: // localhost: 1986 / wss / hello? Wsdl. Stranica koja se otvara, s jedne strane, dokazuje da je web server (http://) pokrenut na našem računalu (localhost) na portu 1986, a s druge strane prikazuje WSDL opis našeg web servisa. Ako zaustavite aplikaciju, opis će postati nedostupan, kao i sam web servis, tako da to nećemo raditi, već ćemo nastaviti sa pisanjem klijenta.

Kupac

U fascikli projekta src kreirajte paket ru.javarush.client, iu njemu klasu HelloWebServiceClient sa glavnim metodom: paket ru. javarush. klijent; // potreban za dobivanje wsdl opisa i kroz njega // doći do samog web servisa import java. net. URL; // takvo izvršenje će se dogoditi kada radite sa URL objektom import java. net. MalformedURLException; // klase za raščlanjivanje xml-ku sa wsdl opisom // i dođemo do servisne oznake u njoj import javax. xml. imenskog prostora. QName; import javax. xml. ws. Service; // sučelje našeg web servisa (treba nam više) import ru. javarush. ws. HelloWebService; javna klasa HelloWebServiceClient (javni statički void main (String args) izbacuje MalformedURLException ( // kreiramo vezu do wsdl opisa Url url= novi URL ( "http: // localhost: 1986 / wss / hello? wsdl") ; // Parametre sljedećeg konstruktora gledamo u prvoj oznaci WSDL opisa - definicije // vidi 1. argument u atributu targetNamespace // vidi 2. argument u atributu name QName qname = novo QName ("http: //ws.site/", "HelloWebServiceImplService"); // Sada možemo doći do servisne oznake u wsdl opisu, Servisna usluga= Usluga. kreirati (url, qname); // a zatim do ugniježđene oznake porta, tako da // dobijemo vezu do objekta web usluge udaljenog od nas HelloWebService hello = usluga. getPort (HelloWebService. klasa); // Ura! Sada možete pozvati udaljenu metodu Sistem. van. println (zdravo. getHelloString ("CodeGym")); )) Dao sam maksimum komentara na kod u listingu. Nemam šta da dodam, pa pokrenite (Shift + F10). Trebali bismo vidjeti tekst u konzoli: Zdravo, CodeGym! Ako ga niste vidjeli, vjerovatno ste zaboravili pokrenuti web uslugu.

Zaključak

U ovoj temi predstavljen je kratak izlet u web servise. Opet, mnogo toga što sam napisao je moje nagađanje o tome kako to funkcionira, i stoga mu ne treba previše vjerovati. Bio bih zahvalan ako upućeni ljudi oni će me ispraviti, jer ću tada nešto naučiti. UPD.

Alexey Boyko

SOAP i XML Web usluge na .Net platformi

XML Web usluge nude ovaj nivo kompatibilnosti i interoperabilnosti između operativnih sistema,

platforme i jezici koji ranije jednostavno nisu bili dostupni.

Andrew Troelsen (MVP (najvredniji profesionalac u Microsoftu))

Ako još niste radili sa XML web servisima, vjerovatno ste čuli riječ "SOAP". Vrijeme je da se uhvatimo u koštac s ovim konceptima.

Intro

Ako vas zanima internet ili manje mreže, velike su šanse da ćete prije ili kasnije naići na XML web servise. XML web usluga nije samo web aplikacija koja može poslati informacije u pretraživač. Umjesto toga, radi se o tehnologiji udaljenog rada koja omogućava da se metode i svojstva objekta preko mreže pozivaju pomoću standardnih HTTP zahtjeva.

U praksi to znači da klijenti takve usluge mogu biti napisani na različitim jezicima i za različite operativne sisteme.

Kao "transport" informacija između servisa i klijenta, možete koristiti HTTP GET ili POST metode.

A možete "prekriti" još jedan protokol - SOAP (Simple Object Access Protocol). To se obično radi, jer je u ovom slučaju moguće prenijeti složene tipove (uključujući i one koje definira korisnik). A klasične metode GET i POST podržavaju samo liste, jednostavne nizove i nizove.

Primjer SOAP Interop

SOAP poruka je XML dokument umotan u tijelo HTTP zahtjeva.

Listing 1. Struktura SOAP poruke

Interakcija između klijenta i servisa je sljedeća:

  • klijent kreira SOAP zahtjev i šalje ga servisu;
  • servis uključen udaljeni računar izvršava proceduru i šalje SOAP odgovor.

Na primjer, SOAP zahtjev može izgledati ovako, pozivajući metodu HelloWorld () udaljene XML web usluge:

Listing 2. Primjer SOAP zahtjeva

Metoda HelloWorld (), kao što se i očekivalo, vraća string "Hello World!":

Listing 3. Uzorak SOAP odgovora

Xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns: xsd = "http://www.w3.org/2001/XMLSchema">

Zdravo svijete!

Kreiranje XML web servisa u .NET 2.0

Možete kreirati uslugu Različiti putevi, koristićemo Visual Studio 2005. Kliknite na "File -> New -> Web Site", u prozoru koji se otvori izaberite "ASP.NET web Service". Na adresi navedenoj prilikom kreiranja, naći ćete sljedeće datoteke i direktorije (vidi sliku 1).

U principu, usluga može sadržavati samo jednu datoteku s ekstenzijom * .asmx. (Proširenje * .asmx se koristi za označavanje .Net web servisa.) U ovom slučaju, to nije slučaj, pogledajte sadržaj datoteke Service.asmx:

Listing 4. Service.asmx definira eksterni fajl podrška

<%@ WebService Language="C#" CodeBehind="~/App_Code/Service.cs" class="Service" %>

Atribut CodeBehind navodi eksternu datoteku koja se nalazi u mapi App_Code koja sadrži kod koji implementira metodu HelloWorld ():

Listing 5. Service.cs File Implementacija HelloWorld () metode

korištenje sistema;

koristeći System.Web;

koristeći System.Web.Services;

Javni servis () (

Vrati "Hello World";

Moguće je kreirati jednu datoteku Service.asmx, bez koda za podršku, koja ima istu funkcionalnost:

Listing 6. Service.asmx bez eksternog koda podrške

<%@ WebService Language="C#" class="Service" %>

korištenje sistema;

koristeći System.Web;

koristeći System.Web.Services;

koristeći System.Web.Services.Protocols;

Usluga javne klase: System.Web.Services.WebService

Javni servis () (

Javni string HelloWorld () (

Vrati "Hello World";

Ovo nam ne treba, i nećemo to učiniti.

Kao što vidite, jedini metod u našem web servisu je označen atributom koji obavještava ASP.NET runtime da je ovaj metod dostupan za dolazne HTTP zahtjeve. Članovi koji nisu identificirani ovim atributom neće biti dostupni klijentskim programima.

Ovakva jednostavna usluga sasvim je prikladna za naše eksperimente, ostaje samo da je objavimo.

Objavljivanje XML web servisa koristeći IIS

Ne govorimo o objavljivanju na Internetu, već o stvaranju uslova za testiranje našeg servisa na lokalnom računaru.

Prvi korak je instaliranje IIS-a (Internet Information Server). Da biste to učinili, otvorite prozor "Dodaj ili ukloni programe" i odaberite "Instaliraj Windows komponente". (Neki Windows verzije ne uključuju instalaciju IIS-a kao što je Windows XP Home Edition.)

Bilješka: IIS server bolje je instalirati ranije nego .Net Framework, inače ćete morati konfigurirati IIS da podržava .Net aplikacije pokretanjem uslužnog programa komandna linija aspnet_regiis.exe (sa / i zastavicom).

Kreirajte virtualni direktorij. Ako koristite Windows XP Pro, idite na "Kontrolna tabla -> Administrativni alati -> Internet Information Services". U prozoru koji se otvori odaberite Akcija -> Kreiraj -> Virtuelni imenik.

Pokrenut će se čarobnjak za novi virtualni direktorij. Alias ​​Soap1 i navedite putanju do direktorija u koji želite postaviti uslugu, na primjer C: \ Soap1. Sada kopirajte sadržaj našeg web servisa tamo.

Upišite http: //localhost/soap1/Service.asmx u adresnu traku vašeg pretraživača i trebali biste vidjeti stranicu za testiranje usluge (pogledajte sliku 2).

Pregled SOAP poruka

Probna stranica ne dozvoljava slanje i čitanje SOAP poruka. Iz tog razloga, morat ćete koristiti razvoj treće strane, preporučujem korištenje soapUI. (Ovo je besplatan proizvod dostupan na http://www.soapui.org.)

Nakon instaliranja soapUI, kreirajte novi projekat pod nazivom soap1, ostavljajući polje Initial WSDL praznim (pogledajte sliku 3).

Desni klik na novokreirani projekat i odaberite "Dodaj WSDL iz URL-a". U dijaloškom okviru koji se otvori unesite http: //localhost/soap1/Service.asmx? Wsdl. Sada imamo mogućnost slanja SOAP zahtjeva našoj usluzi i pregled primljenih odgovora. (Zahtjeve će automatski generirati soapUI.)

Šta je ovo WSDL? WSDL dokument opisuje kako klijenti komuniciraju sa web uslugom. Opisuje koje su metode usluge dostupne za eksterno pozivanje, koje parametre prihvataju i šta vraćaju, kao i druge informacije potrebne za daljinsko upravljanje. Takav dokument se može izraditi ručno, ili možete povjeriti njegovo generiranje serveru, za to je dovoljno dodati Wsdl sufiks URL-u koji upućuje na * .asmx datoteku.

Da vidite WSDL dokument za našu uslugu, unesite http: //localhost/soap1/Service.asmx? Wsdl u svoj pretraživač. Informacije iz ovog dokumenta koristi soapUI za automatsko generiranje SOAP zahtjeva.

SOAP Extensions

Kao što ste možda primijetili, kreiranje XML web servisa (kao i klijenta) ne mora se baviti izgledom SOAP poruka. Dovoljno je označiti tražene metode atributom i ASP.NET runtime generiše pakete potrebnog formata.

Na sl. 4 prikazuje zahtjev i odgovor web usluge primljene pomoću programa soapUI.

Uradimo to još jednom. Zahtjev generira soapUI - kada kreirate stvarne klijente za uslugu, također ne morate ručno formatirati SOAP pakete. Takođe nismo direktno učestvovali u kreiranju odgovora servisa. Sve se ovo dešava automatski.

Međutim, vjerovatno ćete morati sami modificirati ove pakete. Na primjer, komprimirajte ili šifrirajte prenesene podatke. Ovo je svrha SOAP ekstenzija.

SOAP ekstenzije su mehanizam koji vam omogućava da proizvoljno mijenjate SOAP poruke koje šaljete i primate.

SOAP poruka "put"

Da biste započeli s programiranjem, morate uzeti u obzir putanju koju SOAP poruka putuje prije nego što je primljena i obrađena odgovarajućom metodom (vidi sliku 5).

SOAP poruka se može smatrati XML dokumentom koji opisuje objekt koji se prenosi preko mreže. Prije korištenja objekta koji je proslijeđen na ovaj način, mora se vratiti (ili, ako želite, sastaviti) iz ovog opisa. XML serijalizator služi ovoj svrsi.

Dolazni paketi se deserializiraju (vraćanje objekta iz XML opisa), a poslani se serijaliziraju (kreiranje XML opisa objekta).

Na sl. 5 prikazuje četiri tačke (BeforeSerialize, AfterDeserialize, BeforeDeserialize, AfterSerialize) na kojima možemo presresti SOAP poruku pomoću SOAP ekstenzija. Izmijenite ga i pošaljite dalje.

Implementacija SOAP proširenja

Za početak, definirajmo zadatak: recimo da želimo modificirati SOAP pakete koje šalje web servis kao što je prikazano na Listingu 7:

Listing 7. Stari i novi odgovori XML web servisa

Xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns: xsd = "http://www.w3.org/2001/XMLSchema">

Zdravo svijete

Xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns: xsd = "http://www.w3.org/2001/XMLSchema">

Cipher text

Akcioni plan za implementaciju SOAP proširenja:

  • Kreirajte dll sa klasom naslijeđenom od SoapExtension.
  • Dodajte bin folder na naš web servis i tamo stavite kreirani dll.
  • Dodajte web.config datoteku u uslugu i izvršite potrebne izmjene na njoj.

Kasnije ćemo razgovarati o ulozi bin foldera i web.config datoteke.

Kreiranje DLL-a sa SOAP ekstenzijom

Kreirajte novi projekat "Biblioteka razreda" pod nazivom SoapExtensionLib. U ovom projektu trebamo implementirati samo jednu klasu koja će izvršiti modifikacije koje su nam potrebne na SOAP paketima. Ova klasa mora naslijediti klasu SoapExtension.

Listing 8. Kreiranje klase naslijeđene od SoapExtension

korištenje sistema;

koristeći System.Web.Services;

koristeći System.Web.Services.Protocols;

koristeći System.IO;

koristeći System.Net;

koristeći System.Xml;

Svako SOAP proširenje prima kao parametar tok koji sadrži objekt koji će biti proslijeđen mrežom (prije ili nakon serijalizacije). I mora vratiti stream.

SOAP ekstenzija se može zamisliti kao "kutija" koja se može postaviti na jednu ili sve četiri tačke (BeforeSerialize, AfterDeserialize, BeforeDeserialize, AfterSerialize) prikazane na Sl. 5. Na svakoj tački može biti neograničen broj takvih "umetaka" (vidi sliku 6).

Za primanje ovih tokova koristi se metoda ChainStream.

Listing 9. Implementacija ChainStream metode

javna klasa TraceExtension: SoapExtension

Stream wireStream;

Stream appStream;

// metoda kao ulazni parametar

// dobiva tok koji sadrži proslijeđeni objekt

Javno nadjačavanje Stream ChainStream (Stream stream)

WireStream = tok;

AppStream = novi MemoryStream ();

Vrati appStream;

Kod BeforeDeserialize, wireStream sadrži primljeni SOAP zahtjev iz mreže. Ovaj SOAP zahtjev treba proslijediti aplikacijskom toku (appStream).

A na mjestu AfterSerialize, trebate poslati SOAP odgovor koji se šalje mreži na wireStream, koji će biti smješten u appStream.

Da biste radili sa nitima u svakoj od četiri tačke, morate implementirati metodu ProcessMessage.

Listing 10. Implementacija metode ProcessMessage koja ne mijenja SOAP poruke

// ProcessMessage radi obaveznu kopiju

// struji u dvije točke (prije Deserialize i AfterSerialize)

Prebaci (poruka.Stage)

// u tački PrijeDeserialize koju morate proći

// SOAP zahtjev iz mrežnog toka (wireStream)

// do toka aplikacije (appStream)

Case SoapMessageStage.BeforeDeserialize:

Kopiraj (wireStream, appStream);

AppStream.Position = 0;

Break;

// u točki AfterSerialize mora biti proslijeđen

// SOAP odgovor iz toka aplikacije u mrežni tok

AppStream.Position = 0;

Break;

void Copy (stream from, Stream to)

TextReader čitač = novi StreamReader (od);

TextWriter writer = novi StreamWriter (za);

Writer.WriteLine (reader.ReadToEnd ());

Writer.Flush ();

Zamislite Listing 10 kao prazan prostor za dalje eksperimentisanje. Ova implementacija ProcessMessage metode nema nikakvog smisla - odlazni SOAP odgovor se ne mijenja ni na koji način. Popravimo ovo:

Listing 11. Implementacija metode ProcessMessage za izmjenu SOAP odgovora

javno nadjačavanje void ProcessMessage (SoapMessage poruka)

Prebaci (poruka.Stage)

Case SoapMessageStage.AfterSerialize:

WriteOutput (poruka);

Break;

// dio koda je izrezan radi uštede prostora

// prepisujemo SOAP odgovor

public void WriteOutput (SoapMessage poruka)

AppStream.Position = 0;

// kreiramo XML dokument iz toka

XmlDocument dokument = novi XmlDocument ();

Document.Load (appStream);

// Da biste koristili XPath morate definirati

// NamespaceManager

XmlNamespaceManager nsmgr = novi XmlNamespaceManager (document.NameTable);

Nsmgr.AddNamespace ("sapun", "http://schemas.xmlsoap.org/soap/envelope/");

XmlNode ResultNode = document.SelectSingleNode ("// sapun: tijelo", nsmgr);

// zamjenjuje sadržaj čvora

ResultNode.InnerText = "ciphertext";

// očisti stream i napiše novi SOAP odgovor na njega

AppStream.SetLength (0);

AppStream.Position = 0;

Document.Save (appStream);

// OBAVEZNA RADNJA

// proslijediti SOAP odgovor iz toka aplikacije (appStream)

// u mrežni tok (wireStream)

AppStream.Position = 0;

Kopiraj (appStream, wireStream);

Zatim morate definirati dvije metode (od kojih je jedna preopterećena, odnosno može se pozvati s različitim skupovima parametara), koje u našem slučaju nisu potrebne. Međutim, moramo ih definirati u skladu s pravilima nasljeđivanja iz klase SoapExtension.

Listing 12. Druge potrebne metode

// U skladu sa pravilima nasljeđivanja, moramo

// definiramo ove metode, ali ih ne koristimo ni na koji način

javni objekat nadjačavanja?

GetInitializer (LogicalMethodInfo methodInfo, SoapExtensionAttribute atribut)

Vrati null;

javni objekt nadjačavanja GetInitializer (Type WebServiceType)

Vrati null;

javno nadjačavanje void Initialize (inicijalizator objekta)

Povratak;

To je to, sastavljamo projekat. Konačno smo dobili dll sa SOAP ekstenzijom. Kompletna lista SoapExtensionLib.dll može se naći na web stranici časopisa u odjeljku "Izvorni kod".

Konfiguriranje web usluge za rad sa SOAP ekstenzijom

Ponovo otvorite naš projekat XML web usluge pomoću Visual Studio-a. Kliknite na "WebSite -> Add Reference" i odaberite SoapExtensionLib.dll koji ste ranije kreirali.

Bin folder će se automatski dodati projektu. Aplikacija automatski referencira * .dll datoteke koje se nalaze u mapi Bin.

Sada stavite sljedeći sadržaj u datoteku Web.Config u direktorij web usluge:

Listing 13. Datoteka Web.Config

Prioritet = "1"

Grupa = "0" />

Sada struktura naše usluge izgleda kao ona prikazana na sl. 7.

Koristimo datoteku Web.Config da obavijestimo ASP.NET da smo dodali XML Soap Extension na Web uslugu, implementiranu u klasu TraceExtension koja se nalazi u datoteci SoapExtensionLi.dll.

Listing 14. Odjeljak webServices u datoteci Web.Config

Prioritet = "1"

Grupa = "0" />

Kao što već znate, može se napraviti mnogo SOAP ekstenzija, a tok koji nosi proslijeđeni objekt (prije ili poslije serijalizacije) će proći kroz svako od njih. Redoslijed kojim tok teče kroz različite SOAP ekstenzije specificiran je korištenjem atributa prioriteta i grupe.

Vrijedi napomenuti da konfiguriranjem Web.Config na ovaj način obavještavamo okruženje da će naša SOAP ekstenzija biti pozvana za svaku metodu usluge označenu atributom. Moguće je kreirati vlastiti atribut i njime označiti samo one metode za koje trebate pozvati SOAP ekstenziju.

Listing 15. Primjer korištenja prilagođenog atributa

javni string HelloWorld () (

Vrati "Hello World";

Da biste to učinili, dodajte klasu naslijeđenu od SoapExtensionAttribute u SoapExtensionLi.dll (pogledajte sliku 8).

Zaključak

Ovaj članak odražava glavne točke konstrukcije i rada XML web servisa na .Net platformi. Nadam se da će prezentovani materijal biti sasvim dovoljan da se, ako je potrebno, možete upustiti u dublje proučavanje teme.


U kontaktu sa