The following example shows how you can call a ColdFusion Web Service from Flex using the <mx:WebService /> tag.
Full code after the jump.
<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2008/04/14/calling-a-simple-web-service-from-flex-using-the-webservice-class/ -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
verticalAlign="middle"
backgroundColor="white">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;
import mx.utils.ObjectUtil;
private var startTime:int;
private var endTime:int;
private function button_click():void {
webService.getMonths.send();
startTime = getTimer();
lbl.text = "";
}
private function getMonths_result(evt:ResultEvent):void {
textArea.text = ObjectUtil.toString(evt.result);
calcTime();
}
private function getMonths_fault(evt:FaultEvent):void {
Alert.show(evt.type);
calcTime();
}
private function calcTime():void {
endTime = getTimer();
lbl.text = "total time: " + (endTime - startTime) + "ms";
}
]]>
</mx:Script>
<mx:WebService id="webService"
wsdl="http://www.flash-mx.com/ws/months.cfc?wsdl">
<mx:operation name="getMonths"
resultFormat="object"
result="getMonths_result(event);"
fault="getMonths_fault(event);" />
</mx:WebService>
<mx:ApplicationControlBar dock="true">
<mx:Button id="button"
label="get months from web service"
click="button_click();" />
<mx:Spacer width="100%" />
<mx:Label id="lbl" />
</mx:ApplicationControlBar>
<mx:TextArea id="textArea"
editable="false"
width="100%"
height="100%" />
</mx:Application>
View source is enabled in the following example.
If you’re using ColdFusion, the months web service is as follows:
months.cfc
<cfcomponent output="false">
<cffunction name="getMonths" access="remote" returntype="array" output="false">
<cfset var monthNames = ListToArray("January,February,March,April,May,June,July,August,September,October,November,December") />
<cfreturn monthNames />
</cffunction>
</cfcomponent>



{ 20 comments… read them below or add one }
Hi There,
is there any way to load the wsdl address from an external text or xml file?
thansk
Ahmed
Ahmed,
Sure, I just copied my WSDL URL into an external text file, wsdlURL.txt, and then changed the <mx:WebService /> tag to the following code:
Peter
Thanks Peter for your help :-)
much appreciated
@PT – I encountered the same error. I found that changing the soap encoding on the WSDL to version 1 seemed to fix the issue.
It would appear that when the soap encoding on the WSDL is 1.2, things go wrong.
Hi Peter,
I wonder if it is possible to invoke a web servic call from a TitleWindow component which I am displaying as a popup window?
Thanks.
@Angelo,
I imagine that would work with no problems, but give it a try and let us know what you find out.
Peter
Hi Peter,
I tried to do a little example but the web service doesn’t seem to get called from a popup window.
The web service is successfully called from the main application but from the popup titlewindow, it does not work.
I placed some Alert message boxes before and after the web service is called as well as in the ResultHandler event. The alert message shows prior to calling the web service but those in the ResultHandler does not show, which leads me to conclude that the web service method is not being invoked.
I also placed some logging mechanism in the back end web service method and the web service call is logged when I invoke it from my main app, but from the popup, it does not seem to get invoked.
I wonder if this is a flex limitation. If not, I would love to hear from you on this.
Am using the SDK 3.4 by the way.
Thanks.
If interested in other simple example go to
http://programmaremobile.blogspot.com/2009/10/flex-as3-call-java-webservice.html
When you make a simple webservice, the result is simple to parse and bind to a String or Number object for example.
When you make a more complex webservice that transfer or receive by parameter a complex custom object, you need to bind the data to the object stub in your client.
By using Flex Builder you can do the binding work very easy.
click on the url in the signature in order to see the simple steps for do it.
@ Shameer
Even i have the same problem as yours. Is your isssue solved? If so,please help me out.
in flex 3, the menu sequence: Data – Import Web Serverice (WSDL) does a great job of importing the code necessary to turn web service calls into rather straightforward subroutine calls (almost)
And it works great in the development environment.
My web services are being hosted by IIS7 on Windows Server 2008. The SWF file is also being loaded from same.
The problem is that when transferred to a target machine, not the development machine, the code generated by the above “automated” process explicitly specifies the development machine, not the target machine.
There must be a simple and proper way to tell the generated code where the web services are ( hint: same machine that loaded the swf file )
Any suggestions?
/Boyd
Boyd,
I’m struggling with the same issue! Did you make any headway on it ?
I do not know the wsdl address so I use the following wsdl=”http://{getPageDomain}//webservice.asmx?wsdl”. But nothing is displayed. I am getting the page domain from url and splitting it. Please help.
When I try to run the application from this webpage, it just displays an alert window with “fault” . What might be the issue? Has anyone faced a similar problem?
@vik,
The problem is that one of my other sites, http://www.flash-mx.com, is down, and I haven’t bothered to look into it yet. So yes, the SWF example on this page is less than useful. Although the code itself should still be relevant to connecting to a different web service.
Peter
@Peter – Thanks a lot for your response. Yes the code is very useful and thanks again for it. I am trying to connect to a different webservice but I am getting the following error: “HTTP Request Error” although I am using a crossdomain.xml. Since its a HTTP req error, I am suspecting something to do from my side for making HTTP calls… network related issue. Any thoughts on this?
@vik,
I usually start debugging by creating a ColdFusion or PHP script which connects to the web service so I can test to see if the web service is potentially failing or if it is an ActionScript/Flex issue.
Peter
Thanks Pd, Will try that way.
hi,
I am calling a web service (web service is deployed in the different domain) from flex using flash player 9 (crossdomain.xml is placed in the application root directory)and it is working fine. But when we ran it on flash player 10 we got the error:
message faultCode:Channel.Security.Error
faultString:’Security error accessing url’
faultDetail:’Unable to load WSDL. If currently online, please verify the URI and/or format of the WSDL
Please help me in solving this
Hi Peter,
Thanks for the stuff.
I just need a small piece of info from you.
I have a Action Script Value Object class, I’ve successfully passed and received in the Server side (Java). But from the Client side I’m not able to receive the Java Value object from Server Side. After surfing some sites, I’ve got the solution.
But the current problem is, I’m not able to read or receive the Array type values inside Java VO in the Client Side.
Please suggest some solutions.
Thanks
Nathan5.x