gofr: AS3 Web Service

November 25th, 2010 Leave a comment Go to comments

Introduction

gofr is the new project name for my AS3 web service package. I figured “AS3 Web Service” was a little lengthy, and using code names are really cool. ;)
This will be the new home for this package. You will be able to read up on any updates or new downloads.

Features

  • Queued service calls: Methods will be executed in the order they are called in.
  • Assign callbacks: You can assign a function to execute for every service call you make when the response has loaded.
  • Automatic SOAP requests: The class will build and send the SOAP requests for you, no need to create chunks of XML manually.
  • Optional Caching: Saves responses for faster access.

Releases

  • [11.14.07] gofr 1.1 – Click To Download
    - Added optional caching feature
    - Added support for Java based servers using X-Fire

Usage

Simple web service calls

//Required imports
import alducente.services.WebService;
import flash.events.*;
//Instantiate the class
var ws:WebService = new WebService();
//Add a listener for when the web service methods become available
ws.addEventListener(Event.CONNECT, connected);

//Connect to the service by downloading the WSDL
ws.connect("http://ws.cdyne.com/ip2geo/ip2geo.asmx?WSDL");

//Once connected, call an available method on the service named "ResolveIP" with the appropriate parameters
function connected(evt:Event):void{
	ws.ResolveIP(done, "192.123.0.200", 0);
}

//This function is called when there is a response from the sesrvice
function done(serviceResponse:XML):void{
	trace("nWeb Service Result: ");
	trace(serviceResponse);
}
  1. December 5th, 2007 at 23:31 | #1

    super Cooool!

  2. Johan
    December 18th, 2007 at 07:52 | #2

    Cool! It worked on the first try :)

  3. December 20th, 2007 at 18:08 | #3

    Any sample .net code or tips I could give my .net guy. He is lost.

    Thanks!!

  4. December 20th, 2007 at 20:44 | #4

    Craig, If you can provide me with the WSDL you’re working with, I might be able to help you.

  5. December 28th, 2007 at 11:25 | #5

    This rocks so much butt, picking up Adobe’s slack, you deserve some butta on your toast, cheers.

  6. January 17th, 2008 at 14:08 | #6

    Carlo
    Thanks for your response. We are making headway and have had no problems with your class. I am trying to do a try/catch around the web service connect but can’t seem to catch the error. Any suggestions would be appreciated.
    And again, thanks.

  7. January 20th, 2008 at 11:28 | #7

    brilliant! i went through it this morning –no problems except you you should add those Usage comments to the sample fla — I created a very simple web service in Visual Studio with a HelloWorld method — connected to it but I was scratching my head about how to make a method call once I got back my method list, and had to return to your blog to re-read the usage example — eureka:

    function connected(e:Event):void
    {
    ws.HelloWorld(done);
    }

    this will be a great help in our next project…

  8. January 31st, 2008 at 22:40 | #8

    Thanks for sharing

  9. January 31st, 2008 at 22:49 | #9

    you kick so much ass it is not funny!

  10. Vaderist
    December 8th, 2008 at 16:41 | #10

    This class is working great for me when I attempt to access the web service from within the flash player. However, once I upload it I am unable to access any methods located in the wdsl. I can access the wdsl, but then when I attempt to call a method contained therein, it hangs. Any thoughts?

  11. Vaderist
    December 8th, 2008 at 17:56 | #11

    I found the problem. My DB guy returns the XML data without any SOAP formatting. What I needed to do was comment out these lines in WSProxy.as

    var soapAction:URLRequestHeader = new URLRequestHeader(“SOAPAction”, action);
    urlRequest.requestHeaders.push(soapAction);

    All is working great now! It took me a while to get this to work but I learned a lot along the way. This is a well-crafted script… Just wish it was documented better.

    Thanks!

  12. December 8th, 2008 at 18:07 | #12

    @Vaderist

    Do you have a crossdomain.xml up on the root of your server? If you are accessing the service from a different server than where the service is, or if you are connecting with an absolute url, you need to allow access by using a crossdomain policy file.

  13. Lee
    December 30th, 2008 at 01:52 | #13

    Hello,

    I’m new with all this SOAP stuff, so please excuse me if the answer to this is obvious. I am trying to connect to a .NET Web Service. I used soapUI to see what it was expecting. This is what it gave me:

    ?

    Now, when I use your class, how do I tell it to assign the data to ‘gameId’?

    I tried something like ws.StartGame(“XXXXXX”), but it returns the error: Error #2032: Stream Error.

    take care,
    lee

  14. Lee
    December 30th, 2008 at 01:54 | #14

    oops….I meant I make the call ws.StartGame(ok, “XXXXXX”)..

    also I just noticed in my last message all the SOAP code disappeared. It was just a listing about StartGame telling that it needed a variable called ‘gameId’.

  15. NielsR
    March 6th, 2009 at 10:32 | #15

    First of all, your classes have been very useful to me.

    Right now, I have a problem using a Date variable in the service call. The web service is not publicly available yet but it looks something like this:

    public var birthDate:Date = new Date(1970,07,01);

    and the call goes something like this:

    ws.Calculate(done,5000,100,birthDate,10);

    In the old as2 webServiceConnector component the same call to the same URL works fine but I get the feeling that these classes don’t support the Date variable in as3. Is this true? I get the #2032 error when trying.

  16. ozgur uksal
    August 19th, 2009 at 23:03 | #16

    appreciatde for the webservice class. have a question. What is the suggested approach to free the memory once you are done with the webservice? Is it fine to do just ws.removeEventListener( Event.CONNECT, connected);
    ws = null

  17. August 20th, 2009 at 16:11 | #17

    Thankyou, thankyou,thankyou!
    The class works fantastic, just as reported!

    However, I’m having a bit of a problem with accessing webservices on a Mac projector – can anyone please help?

  18. August 25th, 2009 at 16:33 | #18

    @ozgur uksal – Like all other objects the best way to free it is to remove all the listeners and any references to it, the garbage collector should do its thing.

    @Dale – Your issue could be any number of things, one thing I’ll suggest is to make sure your firewall (if you have one running) isn’t blocking any connections from your desktop to the net.

  19. Ben
    September 11th, 2009 at 15:48 | #19

    I’d like to pass an object to my .Net WebService. The object is serializable in .NET, but I can’t figure out what I need to do with ActionScript 3 to pass this object.

    I tried: myWebService.ServiceMethod(done, {FirstName:”Foo”,LastName:”Bar”});

    … but it bombs everytime. What gives?

  20. September 16th, 2009 at 17:12 | #20

    Hey Ben,

    The reason it “bombs” every time in your case is because these classes only handle simple data types, I wrote these to handle simple communication with a .NET service because that’s all I really needed it to do at the time. I posted it to provide a starting point for anyone who might be interested in taking it apart and improving it, like what many others have done.

    So in short, complex data types == bad. There’s plenty other alternatives now that as3′s been around for a while, google is your friend.

  21. Lyn
    September 25th, 2009 at 16:45 | #21

    YAY!!!
    You’ve saved me sooooooooo much time and #@#$!
    <3

  22. October 2nd, 2009 at 18:32 | #22

    adulcente,

    What can I do to implement error handling around my web service methods. I am running into unhandled web service exceptions in a production environment. They aren’t caused by this library, but I need a way to trap them and continue.

    I do my web service calls at timed intervals while the application is running. But it seems that when the error hits, my web service calls no longer execute, even though setInterval continues to execute and the cause for the error has been corrected on the server side.

    Thanks in advance!

  23. November 4th, 2009 at 07:05 | #23

    Hello Carlo, many thanks for this very handy package. You saved me a lot of work and time!

  24. November 10th, 2009 at 11:33 | #24

    Hi,
    just wanted to say that it looks like your lib saved my butt today. I usually do Flex, and naively assumed that I could do webservices in Flash too. It was looking nasty, but I found your lib
    thanks! (yeah it’s for last week)
    Ariel

  25. November 18th, 2009 at 02:11 | #25

    Anyone have an issue with this on a hosted environment?
    I have no problems with consuming the webservice on my local machines and network but when placed onto a hosted box, it just hangs on the call?

    Awesome work! now if I can just get it to work!

  26. November 18th, 2009 at 17:58 | #26

    @Frank
    crossdomain issue! ignore this one! Great work!

  27. November 19th, 2009 at 19:02 | #27

    Hello,
    Fantastic fix, wondering how to bind it to a Data Grid in as3. my test of your code returns XML but the first part is cut off, no SOAP data…

  28. vini
    November 20th, 2009 at 05:46 | #28

    how to fix this crossdomain issue! i placed crossdomain.xml on the server root with “*” and also given Security.allowDomain(“*”) in flash but still i am not able to connect the wsdl

  29. Andrew
    December 1st, 2009 at 23:06 | #29

    Hi, what if my web services is over HTTPS.. I have tried the class but unavailble to connect. Any work around solution?

  30. Jonas
    December 3rd, 2009 at 11:51 | #30

    Is there not any IO error handling in this package? Seems like a pretty standard implementation or am I missing some event?

  31. JOeri
    December 4th, 2009 at 13:31 | #31

    I have exactly the same question / problem as Noah Lively. I’m using timed calls to a webservice.
    When I call a method on the webservice, before my previous call is being finished, it fails every call after. Is there a way to “flush” the calls I am pending or something?

    Thanks!

    Joeri

  32. December 7th, 2009 at 15:14 | #32

    Hey everyone,

    To be completely honest, I’ve stopped updating these classes and the main reason behind posting this for everyone is so that you guys can take it apart and use it as a base for your specific needs. I’ve also been approving comments in hopes that your questions can be answered by someone else.

    So just to get things out of the way:
    - No HTTPS support, something I meant to do but never had time to.
    - No Error handling, again, something I never had time to do. But please take a look at what Johan has done to my classes to see if it’s something you can use: http://manmachine-tech.blogspot.com/
    - Please remember to enable SOAP requests in your crossdomain.xml files

    Thanks for the support but I’m afraid I have very little time to spend on these classes as I’ve been diving into more webcam/flash integration. As of today, there are many other libraries out there that might suit your needs better. In fact, I think I read about someone packaging up the flex classes for use in flash.

    Thanks guys,
    - Carlo

  33. Ken
    December 18th, 2009 at 18:54 | #33

    Fantastic – works perfectly. Thanks Carlo.

  34. Casper
    December 22nd, 2009 at 04:42 | #34

    Hi Guys

    I am new to AS3 and I am having trouble to connect to the WSDL. I get a Security error once i try to access the WS. The error is “Untrusted local SWFs may not contact the Internet.” I have changed the settings to always allow access but still it does not go away.

    Do i need to run the SWF file from within a webpage or will the projector.exe file still work?

    Thanks in advance.
    Casper

  35. ritesh
    April 1st, 2010 at 01:32 | #35

    Hi Guys

    When i load WSDL and try to access any function of webservice i get below error
    TypeError: Error #1006: GetLocaterCities is not a function.

    Please guide me.

    Thanks in advance.
    Ritesh

  36. April 16th, 2010 at 13:09 | #36

    Nice class, but it does not support xsd:import elements, which means it wont work with .NET WCF Services and probably others. That is probably why ritesh gets a “is not a function”, becuase the schema definition for the function is in the missing schema. Here is an example:

  37. John
    May 15th, 2010 at 08:28 | #37

    Thanks for writing and sharing these classes.

    I am very familiar with .NET web services and new to Flash but I had very little trouble getting them to work for me. I have learned a lot about Flash by stepping through your code.

    I am having a problem in one of my method calls. I have a single WebService with four WebMethods. Three of the four work all of the time. The fourth is the problem child. I have isolated it to what appears to be a data length issue. If I call WebService Method4 using a very short input string of XML all is fine. If I call WebService Method4 using the actual input string length of around 2K, I get the dreaded 2032. This is my actual error message.

    IOErrorEvent type=”ioError” bubbles=false cancelable=false eventPhase=2 text=”Error #2032: Stream Error.

    I am also trapping HTTP Status and get this:

    HTTPStatusEvent type=”httpStatus” bubbles=false cancelable=false eventPhase=2 status=400 responseURL=null

    I am also monitoring the web server in real time and can state that the failing request NEVER hits the web server. The request fails in the Flash application.

    I have stepped through all of the GOFR code and checked everything from WSDL parsing, in hope of finding a name truncation … nothing. The fact that the same webmethod works with a short string tells me that the plumbing from my code through GOFR through Flash to the WebService is OK and that the input length is the issue.

    BTW- this is not a webservice I can change so suggestions about changing the required input string to a shorter length won’t help.

    Ideas anyone? Clues? Similar issues?

    All the best,
    John

  38. Peter
    June 24th, 2010 at 10:26 | #38

    @Lee
    Hi Lee
    Were you able to solve your problem? I am experiencing the same error but dont know how to fix it.

    All the best!

  39. fraymas
    June 25th, 2010 at 11:29 | #39

    does it support multiple simultaneous connections?
    itn is very important for me.

    thanks!

  40. July 23rd, 2010 at 04:48 | #40

    Hey Carlo,

    Just so you know, I have been using your library over HTTPS just fine with an ASP.NET server.
    The reason is: you’re using the inbuilt flash.net.* classes for the actual requests, which do support HTTPS.

    Thanks for a great library,
    Pete.

  41. Shane
    August 17th, 2010 at 10:46 | #41

    @Frank
    How did you solve the crossdomain issue ?

  42. Gepabla
    August 25th, 2010 at 13:19 | #42

    I have one question… i am using your classes in a application but it takes a lot to get the data from the webservices… the amount of data is significant.. how can i improve the response time..
    I was wondering if you can give me some advices

    Thanks

    Gerardo P

  43. October 4th, 2010 at 05:39 | #43

    Awesome!
    Very thanks! Good job!

  44. Augusto
    October 13th, 2010 at 20:28 | #44

    Hello,
    i dont know how to get the node value from serviceresponse. Anyone can help?

  45. October 21st, 2010 at 12:01 | #45

    @alducente: Hi , thank you. The class work perfectly.

    Somebody know if could be posible use this class using credentials ?

    Best regards

    Miguel

  46. Nikhil
    October 27th, 2010 at 07:22 | #46

    Hello..
    i have tried your example. It works fine. Well, it works only for “ResolveIP” function. If i replace ResolveIP with the other functions mentioned in your WSDL.
    It throws an error.
    TypeError: Error #1006: ResolveIPResponse is not a function.
    at Example_fla::MainTimeline/connected()
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at alducente.services::WebService/wsdlComplete()
    at alducente.services::WSDL/wsdlLoaded()
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at flash.net::URLLoader/onComplete()

    I am using “http://br-pc-300.proctortest.com/EasyServeIdServiesNew/AuthenticatedService.svc”..!
    No function is working in my wsdl link.

    Please guide me where i am wrong.
    Regards
    Nikhil

  47. Raj
    November 9th, 2010 at 07:47 | #47

    Thanks for the amazing classes. I have my problem solved to much extent. Still i am stuck just at the end.

    Carlo, I just want to ask … I have an argument “DC864D23-14C1-480E-AA42-D4221B3EE9EA”
    i.e. ws.GetUserTrainingDetails(done,”DC864D23-14C1-480E-AA42-D4221B3EE9EA”);.

    And its not working. Can you guide where i am wrong..Its really urgent. Help me.

    Raj

  48. November 14th, 2010 at 00:00 | #48

    great job. many thinks.

  49. December 18th, 2010 at 18:44 | #49

    This class was so easy to use. I was able to implement it in less than 4 minutes. Thanks a million.

  50. January 31st, 2011 at 06:18 | #50

    Great Classes save my time :)

    one question i have regarding OnComplete(serviceRespone:XML), I want to read the service response as a string and i need only the value not all the xml response .

    any suggestions???

    thanks alot.
    Abed

Comment pages
1 2 11
  1. November 14th, 2007 at 17:08 | #1
  2. November 14th, 2007 at 17:10 | #2
  3. November 14th, 2007 at 17:15 | #3
  4. February 2nd, 2008 at 11:47 | #4
  5. July 7th, 2008 at 10:41 | #5
  6. November 25th, 2010 at 21:01 | #6
  7. November 25th, 2010 at 21:03 | #7
  8. November 25th, 2010 at 21:05 | #8