Web Services actually adds another level of complexity over just using HTTPService and XML.
If you have mastered the HTTPService/XML, I would recommend moving to a fully object oriented method of sending/receiving data/objects using AMF. Weborb (http://www.themidnightcoders.com/weborb) supports multiple backend languages including .NET. Once you learn AMF, you will never go back to the other ways. In fact, I have to connect to various Web Services and, rather than doing it directly from Flex, I use a PHP SOAP Client to get the data which I package up as objects and return them to Flex via AMF. --- In [email protected], "duanstravels" <[EMAIL PROTECTED]> wrote: > > 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 > > *********************************************************** > 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" 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" > 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 >

