Flex调用WebService进行数据查询和显示(调整)
Smark C# Library orm,mvc,socket tcp
Flex调用WebService进行数据查询和显示(调整)??? 在这里向大家介绍一下Flex通过调用.net WebService进行数据查询和显示的实现。对于Flex的介绍就不描述,有兴趣的朋友可以到Adobe的官方站了解(http://www.adobe.com/devnet/flex/)。Flex提供了Remoting,HttpService,WebService等对象进行网络数据交互。在本文所用到的对象是WebService,它提供了方便灵活的WebService方法调用。 ?????? 先看本文例子的效果图: ?????? ? ?????? 建立基于NorthWind.Employees表的数据查询方法。 ? ?????? public string ListEmployees()//获取所有雇员返回相关的XML格式字符串 <Employees> ??? <Item> ??????? <EmployeeID>1</EmployeeID> ??????? <EmployeeName>NancyDavolio</EmployeeName> ??????? <Title>Sales Representative</Title> ??? </Item> ??? <Item> ??????? <EmployeeID>2</EmployeeID> ??????? <EmployeeName>AndrewFuller</EmployeeName> ??????? <Title>Vice President,Sales</Title> ??? </Item> </Employees> ? ?????? public string GetEmployee(int employeeid)//获取指定索引雇员信息的XML格式字符串 <Body> ??? <Item> ??????? <EmployeeID>1</EmployeeID> ??????? <FirstName>Nancy</FirstName> ??????? <LastName>Davolio</LastName> ??????? <Title>Sales Representative</Title> ??????? <TitleOfCourtesy>Ms.</TitleOfCourtesy> ??????? <BirthDate>1948-12-8 0:00:00</BirthDate> ??????? <HireDate>1992-5-1 0:00:00</HireDate> ??????? <Address>507 - 20th Ave. E. Apt. 2A</Address> ??????? <City>Seattle</City> ??????? <Region>Seattle</Region> ??????? <PostalCode>98122</PostalCode> ??????? <Country>USA</Country> ??????? <Notes></Notes> ??????? </Item> ??? <Error> ??? </Error> </Body> ?????? 在这里可能有人问为什么不直接返回可以序列化的对象,这样不是更方便吗?刚开始时我想直接返回DataSet但是Flex并不支持会产生调用错误(具体情况还在查找中)。虽然返回的是XML的字符串,但Flex提供灵活的XML文本处理对象直接支持XML文件转换成对象操作(这功能很喜欢,不知道C#3.0是否提供)。 ? 在Flex中定义WebService访问对象: ?<mx:WebService id="WS" wsdl="http://localhost/WebService2/Service1.asmx?WSDL" ??????? fault="Alert.show(event.fault.faultString),'Error'"> ??????? <mx:operation name="ListEmployees" resultFormat="object" result="EmployeeList(event)"> ??????? </mx:operation> ??????? <mx:operation name="GetEmployee" resultFormat="object" result="GetObj(event)"> ??????????? <mx:request> ??????????????? <employeeid>{employeeList.selectedItem.EmployeeID}</employeeid> ??????????? </mx:request> ??????? </mx:operation> </mx:WebService> ? operation是描述相关方法。 result 是方法调用完成后的委托方法。 request 是描述相关方法的参数,通过{employeeList.selectedItem.EmployeeID}把参数值指定到相关对象的属性上。 可以通过WS.GetEmployee()来进行相关方法的调用。 ? 调用GetEmployee方法后的处理代码: function EmployeeList(event:ResultEvent):void ???????????????? { ??????????????????????? var doc:XMLDocument = new XMLDocument(event.result.toString()); ??????????????????????? var obj:XML; ??????????????????????? var employees:Array = new Array(); ??????????????????????? for(var i:int=0;i<doc.firstChild.childNodes.length;i++) ??????????????????????? { ?????????????????????????????? obj = new XML(doc.firstChild.childNodes[i].toString());//创建一个XML对象,直接支持对象属性访问。 ?????????????????????????????? employees.push(obj); ?????????????????????????????? ??????????????????????? } ??????????????????????? ??????????????????????? employeeList.dataProvider=employees;//把数据源绑定到列表中 ??????????????????????? ??????????????????????? ???????????????? } ? 调用GetObj方法后处理的代码: function GetObj(event:ResultEvent) ???????????????? { ??????????????????????? var re:XML = new XML(event.result.toString()); ??????????????????????? if(re.Error != null && re.Error !="") ??????????????????????? { ?????????????????????????????? Alert.show(re.Error); ?????????????????????????????? return; ??????????????????????? } ??????????????????????? editAddress.text= re.Item.Address; ??????????????????????? editBirthDate.text = re.Item.BirthDate; ??????????????????????? editCity.text = re.Item.City; ??????????????????????? editCountry.text = re.Item.Country; ??????????????????????? editEmployeeID.text = re.Item.EmployeeID; ??????????????????????? editFirstName.text = re.Item.FirstName; ??????????????????????? editLastName.text = re.Item.LastName; ??????????????????????? editNotes.text = re.Item.Notes; ??????????????????????? editPostalCode.text = re.Item.PostalCode; ??????????????????????? editRegion.text = re.Item.Region; ??????????????????????? editTitle.text = re.Item.Title; ??????????????????????? editTitleOfCourtesy.text = re.Item.TitleOfCourtesy; ??????????????????????? editHireDate.text = re.Item.HireDate; ???????????????? } 从上面的代码可以看到XML是一个非常灵活的对象,它可以把XML格式的字符串转成相关对象进行操作。 ? 一个简单的调用WebServie方法进行数据查询和显示就完成了,看上去是不是很简单方便。不过Flex是基于Flash的Activex表现的,本质上和传统的JavaScript结合Html有很大差别。 ? 对于WebService的实现代码就不详细讲了,相信大家在VS.NET下写WebService已经熟悉了。 下载相关代码 ??????? <mx:operation name="ListEmployees" resultFormat="object" > </mx:Application> [WebMethod] ???????? [System.Xml.Serialization.XmlInclude(typeof(EmployeeItem))] ???????? public ArrayList? ListEmployees() ???????? { ????????????? ????????????? SqlCommand cmd = new SqlCommand("select * from employees"); ????????????? ArrayList list = new ArrayList(); ????????????? using(SqlConnection conn = new SqlConnection(ConnectionString)) ????????????? { ?????????????????? ?????????????????? conn.Open(); ?????????????????? cmd.Connection = conn; ?????????????????? using(IDataReader reader = cmd.ExecuteReader()) ?????????????????? { ?????????????????????? while(reader.Read()) ?????????????????????? { ??????????????????????????? EmployeeItem item = new EmployeeItem(); ??????????????????????????? item.EmployeeID = reader["EmployeeID"].ToString(); ??????????????????????????? item.EmployeeName = reader["FirstName"].ToString()+reader["LastName"]; ??????????????????????????? item.Title = reader["Title"].ToString(); ??????????????????????????? list.Add(item); ?????????????????????? } ?????????????????????? ?????????????????? } ????????????? } ????????????? return list; ????????????? ???????? } ???????? ???????? [WebMethod] ???????? public ItemInfo? GetEmployee(int employeeid) ???????? { ????????????? ????????????? ItemInfo info = new ItemInfo(); ????????????? SqlCommand cmd = new SqlCommand("select * from employees where employeeid=" +employeeid); ????????????? using(SqlConnection conn = new SqlConnection(ConnectionString)) ????????????? { ?????????????????? ?????????????????? conn.Open(); ?????????????????? cmd.Connection = conn; ?????????????????? using(IDataReader reader = cmd.ExecuteReader()) ?????????????????? { ?????????????????????? if(reader.Read()) ?????????????????????? { ??????????????????????????? info.EmployeeID =reader["EmployeeID"].ToString(); ??????????????????????????? info.FirstName =reader["FirstName"].ToString(); ??????????????????????????? info.LastName =reader["LastName"].ToString(); ??????????????????????????? info.Title =reader["Title"].ToString(); ??????????????????????????? info.TitleOfCourtesy =reader["TitleOfCourtesy"].ToString(); ??????????????????????????? info.BirthDate =(DateTime)reader["BirthDate"]; ??????????????????????????? info.HireDate =(DateTime)reader["HireDate"]; ??????????????????????????? info.Address =reader["Address"].ToString(); ??????????????????????????? info.City =reader["City"].ToString(); ??????????????????????????? info.Region=reader["Region"].ToString(); ??????????????????????????? info.PostalCode =reader["PostalCode"].ToString(); ??????????????????????????? info.Country =reader["Country"].ToString(); ??????????????????????????? info.Notes =reader["Notes"].ToString(); ??????????????????????????? ?????????????????????? } ?????????????????????? ?????????????????? } ????????????? } ????????????? return info; ????????????? ???????? } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |