FluorineFx学习整理(一)

服务器端相关代码

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.myTable2  
as
  ArrayCollection;
}
private function
 onCodeStatus(event:Object):
void
{
 
trace
(
"Error"
);
}

3. 接收返回的对象

可以创建一个与服务器端对象一样结构的AS3对象来接收返回值,或直接用Object来接收

private function
 onResult(event:ResultEvent):
void
{
 
var
obj:Object = event.result  
as
  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.result  
as
  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.myTable2  
as
  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;
}
原文地址:https://www.cnblogs.com/CoderWayne/p/1777897.html