服务器端相关代码
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; }