En webservice är ett program som körs på en webserver. Programmet kan vara programmerat i ett av flera olika språk, däribland Java och C#. I programmet har man en klass som är åtkomligt genom http requests.
På server sidan görs allt om till objekt, så server programmeraren behöver aldrig oroa sig för XML:en som används. Detta görs helt automatiskt. Det är lite som PHP eller ASP för er som är vana vid detta. Man skickar in en förfrågan, den kan t.ex. vara skapad som ett formulär och skickad med POST metoden. PHP/ASP skriptet tar emot den postade förfrågan, hanterar den, och sedan retuneras en färdig sida, helt baserad på förfrågningen som användaren gjorde. Skillnaden är att det som skickas och retuneras är XML.
Webservices i Flash nu då?
I AS2 fanns det en färdig webservice klass som kunde användas. Den kom med i MX klasserna och ligger under mx.services. Av någon anledning försvann detta stödet i AS3. Det skapades därför ett flertal klasser för att konsumera och använda webservices i AS3 av tredje parts utvecklare, bl.a. den som jag har gjort och som jag kommer använda genom alla mina exempel. Webservice klassen kommer, precis som på servern, göra om alla objekt till korrekta AS3 objekt, och du som utvecklare behöver aldrig bry dig om XML:en. Allt sköts automatiskt åt dig.
Kan man inte bara skicka och ta emot XML:en?
Absolut! Det är inte ett måste att använda sig av en Webservice decoder. Du kan skicka XML till en webservice, och sen ta hand om XML:en som kommer tillbaka. Men, en webservice har en jättestor XML sida som heter WSDL. En WSDL förklarar hur alla anrop ser ut, och hur svaren ser ut. Med hjälp av detta kan man därför skapa färdiga objekt av svaret, och omvandla ett objekt till XML som kommer att förstås på bägge sidor. WSDL:en förklarar alltså hur ett anrop ser ut, och hur svaret ser ut. När du använder en Webservice Decoder (som den jag byggt) använder den sig av den här WSDL:en. När du gör ett anrop mot servern görs dina objekt om till XML som servern kommer förstå. När servern sen skickar tillbaka ett svar (i form av XML) görs detta om på klientsidan (din sida) till riktiga AS3 objekt. Du behöver alltså inte oroa dig för en krånglig XML.
Förklara lite mer hur hela flödet fungerar!
Ok. Först hämtas WSDL:en från servern. När detta är gjort kan sedan flash göra anrop mot servern. Så fort en metod körs från flash till servern görs detta om till XML. Denna XML:en utformas efter hur WSDL:en säger att den ska se ut. När ett svar kommer tillbaka i form av XML görs denna om till ett AS3 objekt, enligt hur WSDL:en säger att den ska se ut.
Ne, nu slänger vi oss in i det här så kommer ni förstå mer.
Mitt första webservice anrop!!!
Nu ni, nu kör vi igång. Skapa ett nytt projekt, ställ in stolen rätt och förbered er på att kasta er in i en helt ny värld av möjligheter. Först av allt, spring över till http://doc.mowday.se och ladda ner den senaste versionen av Webservice paketet. I skrivande stund är detta 1.03. Packa upp den till din root nivå. I mitt fall är detta src mappen. Först behöver vi en klass där vi ska koda allt, skapa en ny klass som heter Main.as och fyll den med denna koden:
Som ni ser har jag redan importerat flera klasser till denna klassen, men var lugn jag ska gå igenom allt!!! Hittills borde inget vara krångligt. Vi har skapat ett objekt som heter Main, ärver av klassen sprite och har en konstruktor där vi inte gör något än. Nu skapar vi ett nytt objekt av webservice klassen. Vi säger till den att vi vill anropa ”http://www.webservicex.net/ValidateEmail.asmx”. Det är en webservice som kontrollerar om en e-post adress är giltig eller inte. Den enda metoden som finns där är IsValidEmail. Den vill ha en e-post i form av en sträng som inparameter och skickar tillbaka en boolean (true/false) om det gick bra eller inte. Nu ska vår kod alltså se ut så här:
Perfekt! Nu lägger vi på en lyssnar på det objektet som lyssnar på WebserviceEvent.
RESPONSE. RESPONSE eventet skickas ut varje gång vi får ett svar. I metoden som hanterar eventet kollar vi först om det gick bra eller inte.Gick det bra, skriver vi antingen ut ”Du har en giltig mail” i tracen, eller ”Du har inte en giltig mail”, beroende på vad servern säger. Om anropet gick fel tracar vi ut vad som gick fel.
Koden ser nu ut så här:
Nu har vi allt färdigt! Det enda vi behöver göra nu är själva anropet. Webservice klassen är en såkallad proxy, så du kan tänka dig att du har servern som objekt, och kör alla metoder direkt på den. Skillnaden är att du inte får svaret direkt, utan måste vänta på detta. Nu kör vi metoden IsValidEmail:
Så där ja! Nu när du kör filmen får du vänta lite. Servern vi kopplar mot är långsam och först måste WSDL:en hämtas. (Om du vill se hur den ser ut kan du se den här: http://www.webservicex.net/ValidateEmail.asmx?wsdl). När det är gjort kommer det tracas ut om du har en giltig mail eller inte. Det finns självklart ingen anledningen att göra så här när man ska testa en mail, det tar för lång tid. Men man kan t.ex. hämta nyheter med en webservice, bygga ett login system. I stort sett allt där du behöver kommunicera med en server och där det inte behöver gå jättefort. Självklart går det snabbare efter första anropet. Vid första anropet hämtas först WSDL:en. Men detta görs bara en gång. Nästa gång du gör ett anrop vet vi redan hur WSDL:en ser ut, och behöver därför inte hämta den igen, utan kan köra metoderna direkt.
Summan av kardemumman
Det var det hela. Det finns en massa webservicar ute på nätet som är gratis att använda! Om du vill kan jag även visa hur man bygger en egen webservice! Om du vill detta, rösta ”Jag vill ha en fortsättning” längst upp. Har du några frågor, bara kontakta mig så hjälper jag dig mer än gärna!














