But, valdhor is correct. Webservices are *more* messy than xml over http, since they wrap the content in all the SOAP stuff.
The primary benefit of webservices are that anonymous third parties can read the wsdl and determine how to access the webservice. If your data service is not intended to be publicly published this way, then there is no benefit to the extra SOAP overhead. I find xml over HTTPService to be the simplest of the protocols to create and use, and is the one I always advise for new developers. What was your problem with it, and why did you expect WebService to solve it? Tracy ________________________________ From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Tracy Spratt Sent: Thursday, November 06, 2008 4:54 PM To: [email protected] Subject: RE: [flexcoders] Using XML Object passed from ASP.NET web service in a Flex Datagrid Set the resultFormat on the WebService or operation to "e4x". Unless you do this Flex convert you xml to a stucture of nested dynamic objects. You almost never want this. Then in your handler, inspect your data: retData = event.result as XML; trace(retData.toXMLString()); //so yo can know exactly how to build the expressin in the next line retList = retData.data; trace(retList.toXMLString()); //is this what you expect? Tracy ________________________________ From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of duanstravels Sent: Thursday, November 06, 2008 1:53 PM To: [email protected] Subject: [flexcoders] Using XML Object passed from ASP.NET web service in a Flex Datagrid Hey Guys I have literally been banging my head on this for the last three days. I have used flex in a previous project, and had enormous success with the great charts and presentation layer. I am now taking on a fairly ambitious new project and wanted to do things a different way, as it needs to be scalable. My previous project used HTTPServices to connect to a .aspx page, which in turn returned a XML page. This works, but is very messy. I would now like to use webservices, as I think it would simplify things a great deal. I have written the following service in ASP.NET, which works as it returns the XML document when I test the method by running the report.asmx file from the following link: http://localhost:1464/MyProject/report.asmx/All_Entities <http://localhost:1464/MyProject/report.asmx/All_Entities> *********************************************************** WebMethods and function in ASP.NET Web service: <WebMethod()> _ Public Function HelloWorld() As String Return "This works" End Function <WebMethod()> _ Public Function All_Entities() As XmlDocument Return ReturnXMLData("sp_AllEntities", 0, "NA") End Function Public Function ReturnXMLData(ByVal spName As String, _ ByVal numParams As Integer, _ ByVal ParamArray spParam() As String) As XmlDocument Dim cnString As String = ConfigurationManager.ConnectionStrings("cnDBConnect").ConnectionString Dim myConnection As New SqlConnection myConnection.ConnectionString = cnString Dim myCommand As New SqlCommand With myCommand .Connection = myConnection .CommandType = CommandType.StoredProcedure .CommandText = spName End With myConnection.Open() 'Return the XML data from SQL and read into a string value Dim xmlr As System.Xml.XmlReader xmlr = myCommand.ExecuteXmlReader() xmlr.Read() Dim retXMLString As New StringBuilder retXMLString.Append("<data>") Do While xmlr.ReadState <> ReadState.EndOfFile retXMLString.Append(xmlr.ReadOuterXml()) Loop retXMLString.Append("</data>") myConnection.Close() Dim xmlDoc As New XmlDocument() xmlDoc.LoadXml(retXMLString.ToString()) Return xmlDoc End Function *********************************************************** The XML output returned from the .NET web service is below. I copied this straight from the page returned inside Firefox after calling the webmethod: <data> <root EntityName="US" EntityId="1"/> <root EntityName="EMEA" EntityId="2"/> <root EntityName="Benelux" EntityId="3"/> <root EntityName="Africa" EntityId="4"/> <root EntityName="Asia" EntityId="5"/> </data> *********************************************************** I now need to catch the output (which I assume is a XML object) and then bind it to a datagrid or chart. I have the following MXML component set up. It connects to the webservice, catches the result, and then converts it into XML. I then try to bind it to a datagrid. I also have a text box which binds to a method "HelloWorld()" which returns a string value and then correctly displays the text, so I know the connection works: *********************************************************** <?xml version="1.0" encoding="utf-8"?> <mx:Box xmlns:mx="http://www.adobe.com/2006/mxml <http://www.adobe.com/2006/mxml> " width="100%" height="100%" > <mx:Script> <![CDATA[ import mx.rpc.events.ResultEvent; [Bindable] private var retData:XML; private var retList:XMLList; private var lstAM:ArrayCollection; private function handleResult(event:ResultEvent):void{ retData = event.result as XML; retList = retData.data; this.dgDataReturned.dataProvider = retList; } ]]> </mx:Script> <mx:Button label="Get String" click="{WS.HelloWorld();}"/> <mx:TextArea width="252" height="116" id="txtHello" text="{WS.HelloWorld.lastResult}"/> <mx:Button label="Get Data" click="{WS.All_Entities();}"/> <mx:DataGrid id="dgDataReturned"> <mx:columns> <mx:DataGridColumn headerText="label" dataField="@EntityName"/> <mx:DataGridColumn headerText="data" dataField="@EntityId"/> </mx:columns> </mx:DataGrid> <mx:WebService id="WS" wsdl="http://metrix3/asp/metrixwebservice.asmx?wsdl <http://metrix3/asp/metrixwebservice.asmx?wsdl> " result="handleResult(event);"> </mx:WebService> </mx:Box> *********************************************************** I have tried just about anything to get this working, but as I have learned flex as I needed I don't really have the background knowledge to even ask the right questions when searching for answers. I am not sure if there are other people struggling with this as well, but I think it must be a common problem. I just haven't been able to find any help online. Any ideas would be appreciated. Cheers Duan

