服务器端相关代码
Game.cs(实体类)
namespace ServiceLibrary1 { [TransferObject]public class
Game {public
int ID { get; set; }public
string Name { get; set; }public
string Country { get; set; } } }
GameTask.cs(操作类)
namespace ServiceLibrary1 { [RemotingService]public class
GameTask {public
Game GetGame() {returnnew
Game { ID = 1, Name ="魔兽世界"
, Country ="美国"
}; } [DataTableType("ServiceLibrary1.Game"
)]public
DataTable GetDataTable() { DataTable dt =new
DataTable(); dt.Columns.Add("ID"
,typeof
(int)); dt.Columns.Add("Name"
,typeof
(string)); dt.Columns.Add("Country"
,typeof
(string)); DataRow dr = dt.NewRow(); dr["ID"
] = 1; dr["Name"
] ="《大话西游》"
; dr["Country"
] ="中国"
; dt.Rows.Add(dr); dr = dt.NewRow(); dr["ID"
] = 2; dr["Name"
] ="《永恒之塔》"
; dr["Country"
] ="韩国"
; dt.Rows.Add(dr);return
dt; } [DataSetType("ServiceLibrary1.DSClass"
)] [DataTableType("group1"
,"myTable1"
,"ServiceLibrary1.Game"
)] [DataTableType("group2"
,"myTable2"
,"ServiceLibrary1.Game"
)]public
DataSet GetDataSet() { DataSet ds =new
DataSet(); DataTable dt = ds.Tables.Add("group1"
); dt.Columns.Add("ID"
,typeof
(int)); dt.Columns.Add("Name"
,typeof
(string)); dt.Columns.Add("Country"
,typeof
(string)); DataRow dr = dt.NewRow(); dr["ID"
] = 3; dr["Name"
] ="《魔力宝贝》"
; dr["Country"
] ="日本"
; dt.Rows.Add(dr); dr = dt.NewRow(); dr["ID"
] = 4; dr["Name"
] ="《剑侠情缘三》"
; dr["Country"
] ="中国"
; dt.Rows.Add(dr);//table2
dt = ds.Tables.Add("group2"
); dt.Columns.Add("ID"
,typeof
(int)); dt.Columns.Add("Name"
,typeof
(string)); dt.Columns.Add("Country"
,typeof
(string)); dr = dt.NewRow(); dr["ID"
] = 5; dr["Name"
] ="《传奇》"
; dr["Country"
] ="韩国"
; dt.Rows.Add(dr); dr = dt.NewRow(); dr["ID"
] = 6; dr["Name"
] ="《魔戒》"
; dr["Country"
] ="美国"
; dt.Rows.Add(dr);return
ds; } } }
1. <mx:RemoteObject>控件访问
<mx:RemoteObject id="ro1"
destination="fluorine"
source="ServiceLibrary1.GameTask"
fault="onFault(event)"
> <mx:method name="GetGame"
result="onResult(event)"
></mx:method> <mx:method name="GetDataTable"
result="onDataTableResult(event)"
></mx:method> <mx:method name="GetDataSet"
result="onDataSetResult(event)"
></mx:method> </mx:RemoteObject>
2. 代码直接访问
private function
onCodeClick(event:MouseEvent):void
{var
nc:NetConnection =new
NetConnection();var
responder:Responder =new
Responder(onCodeResult,onCodeStatus); nc.objectEncoding = ObjectEncoding.AMF3; nc.connect("http://localhost:4608/Web/gateway.aspx"
); nc.call("ServiceLibrary1.GameTask.GetDataSet"
,responder); }private function
onCodeResult(result:Object):void
{this
.dataGrid1.dataProvider = result.myTable2as
ArrayCollection; }private function
onCodeStatus(event:Object):void
{trace
("Error"
); }
3. 接收返回的对象
可以创建一个与服务器端对象一样结构的AS3对象来接收返回值,或直接用Object来接收
private function
onResult(event:ResultEvent):void
{var
obj:Object = event.resultas
Object;this
.lblResult.text = obj.Name; }
4. 接收返回的DataTable
服务器端的DataTable,在Flex端可以转换为ArrayCollection;需要注意的是,服务器端要在该方法前声明[DataTableType(remoteClass:String)]
private function
onClick(event:MouseEvent):void
{ ro1.GetDataTable(); }private function
onDataTableResult(event:ResultEvent):void
{this
.dataGrid1.dataProvider = event.resultas
ArrayCollection; }
5. 接收返回的DataSet
DataSet包含有多个DataTable,在服务器端返回DataSet方法时,需要加入一个DataSetType和若干个DataTableType声明,例如:
[DataSetType("ServiceLibrary1.DSClass"
)] [DataTableType("group1"
,"myTable1"
,"ServiceLibrary1.Game"
)] [DataTableType("group2"
,"myTable2"
,"ServiceLibrary1.Game"
)]public
DataSet GetDataSet() { DataSet ds =new
DataSet(); DataTable dt1 = ds.Tables.Add("group1"
);//……
DataTable dt2 = ds.Tables.Add("group2"
);//……
}
这里的DataSetType所定义的DSClass,好像并不需要有这样一个实体类对应,随便写个都没什么问题;DataTableType的参数是DataTableType(表名,引用时的属性名,相应的类名)
private function
onClick(event:MouseEvent):void
{ ro1.GetDataSet(); }private function
onDataSetResult(event:ResultEvent):void
{this
.dataGrid1.dataProvider = event.result.myTable2as
ArrayCollection; }
6. 接收返回的对象数组(Object[])
对象数组可以直接用Flex端的Array来接收
private function
onCodeResult(result:Array):void
{this
.dataGrid1.dataProvider = result; }
7. 接收返回的List<OBJECT>
List<OBJECT> 可以直接用Flex端的ArrayCollection来接收
private function
onCodeResult(result:ArrayCollection):void
{this
.dataGrid1.dataProvider = result; }