Flex与DotNET WebService交互(1)
Flex常用的访问远程数据的类有:HTTPService, WebService, RemoteObject. HttPService与 WebService自不必说,使用的是基于XML的SOAP(Simple Object Access Protocol, 简单对象访问协议),而RemoteObject使用的却是序列化的二进制协议AMF. AMF(Action Message Format)是在flash和flex中remoting的一种方式格式。笔者在这里并不太想讨论这个有点“非主流”的方式,只讨论一下Flex与DotNET WebService的交互。
调用DotNET的WebService会自动执行序列化的操作。
序列化是将一个对象保存到存储介质上或者将对象进行转换使之能够在网络上传送的行为。在一个对象被序列化之后,如果想使用,需要将它反序列化,也就是将数据重新转换为可用的对象的行为。序列化主要用途有两种,一是用在一个对象必须被从一个上下文封送到另一个上下文的时候,例如当对象跨越App域的时候。另外一个例子是Web服务——对象在服务器上被序列化,通过网络被(封送或)发送到的客户端,然后被反序列化成有用的对象。
利用Flex与DotNET WebService交互,用到的正是上文提到的序列化的第二个用途。序列化得到的XML格式数据,可以通过Flex中的WebService标签进行获取并利用DataGrid组件将数据显示出来。
首先来看一个最简单的实例:
先创建最基本的类:
<mx:Script> <![CDATA[ internal var employees:ArrayCollection; internal function onList(event:ResultEvent):void { employees = new ArrayCollection(); employees = event.result as ArrayCollection; this.dgEmployees.dataProvider = employees; } ]]> <mx:WebService id="webService" wsdl="http://localhost:2492/Service1.asmx?wsdl"> <mx:operation name="listEmployees" result="onList(event)" fault="onFault(event)" /> </mx:WebService> <mx:DataGrid id="dgEmployees"> <mx:columns> <mx:DataGridColumn headerText="ID" dataField="Id"/> <mx:DataGridColumn headerText="NAME" dataField="Name"/> </mx:columns> </mx:DataGrid> <mx:Button id="btnList" label="List" click="webService.listEmployees();" />
/// <summary> /// webmethod used to return an object collection /// </summary> /// <returns>employees</returns> [WebMethod] public List<Employee> listEmployees() { List<Employee> employees = new List<Employee>(); employees.Add(new Employee("006", "Aking")); // To test the one-record-returned result, comment the following line. employees.Add(new Employee("007", "spoony")); return employees; }
心急一下,先看看浏览WebService的效果:
注意此处的协议为HTTP POST,
<?xml version="1.0" encoding="utf-8" ?> <ArrayOfEmployee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/"> <Employee> <Id>006</Id> <Name>Aking</Name> </Employee> <Employee> <Id>007</Id> <Name>spoony</Name> </Employee> </ArrayOfEmployee>
Flex应用程序的相关代码如下:
/// <summary> /// Business entity used to model an emplayee. /// </summary> public class Employee { /// <summary> /// identity /// </summary> public string Id { get; set; } /// <summary> /// name /// </summary> public string Name { get; set; } /// <summary> /// constructors /// </summary> public Employee() { } public Employee(string id, string name) { this.Id = id; this.Name = name; } }
最后来看看运行效果:
这样一个最简单的Flex与DotNET WebService交互示例就完成了。
人每天要做三件事,第一件是微笑,第二件是欢笑,第三件是大笑。