如果不知道什麼是Fluorine的話
可以先參考筆者寫的Fluorine新手上路
Fluorine之好用, 真的沒話說,
整個省去型別轉換,速度比一般的傳值接值還要快
安全性也比較高一點(至少使用httpwatch這一類的軟體, 只能查到一堆亂碼)
如果你也剛好是使用.net + Flash在開發的話,強力推薦這個技術。
在上一篇的教學裡,我們己經成功連線, 和.net互傳字串, 接下來我們就把完整成用的類別實作一次。
在FluorineFX官方說明文件裡有清楚的記載flash和.net類別互傳後的型別。
在這兒都以AMF3格式做說明, AMF0(AS2)就不去討論了。
一般物件的互傳,都還滿簡單的,
但有幾個小地方要注意一下
.net回傳ArrayCollection, 只有Flex才能使用
.net回傳DataTable, flash接到是Array, 但裡面的資訊不好解悉
.net回傳DataTable加上[DataTableType("vo.UserVO")]屬性,
flash接預設是ArrayCollection裡放UserVO類別, 但Flash不能使用
需要更改service.config裡的true 即可
.net回傳自定的 UserVO 類別, flash要有一個一模一樣的 UserVO.as檔
且使用 且要使用 registerClassAlias("vo.UserVO", UserVO); 注冊一次
在 console 管理介面時, 要測試傳送Array的話, 可以打上[值,值,值]

要傳送Object的話, 可以使用JSON字串, ex:{"key":"value","key2","value2"}

以下為.net的程式碼。
可以先參考筆者寫的Fluorine新手上路
Fluorine之好用, 真的沒話說,
整個省去型別轉換,速度比一般的傳值接值還要快
安全性也比較高一點(至少使用httpwatch這一類的軟體, 只能查到一堆亂碼)
如果你也剛好是使用.net + Flash在開發的話,強力推薦這個技術。
在上一篇的教學裡,我們己經成功連線, 和.net互傳字串, 接下來我們就把完整成用的類別實作一次。
在FluorineFX官方說明文件裡有清楚的記載flash和.net類別互傳後的型別。
在這兒都以AMF3格式做說明, AMF0(AS2)就不去討論了。
一般物件的互傳,都還滿簡單的,
但有幾個小地方要注意一下
.net回傳ArrayCollection, 只有Flex才能使用
.net回傳DataTable, flash接到是Array, 但裡面的資訊不好解悉
.net回傳DataTable加上[DataTableType("vo.UserVO")]屬性,
flash接預設是ArrayCollection裡放UserVO類別, 但Flash不能使用
需要更改service.config裡的
.net回傳自定的 UserVO 類別, flash要有一個一模一樣的 UserVO.as檔
且使用 且要使用 registerClassAlias("vo.UserVO", UserVO); 注冊一次
在 console 管理介面時, 要測試傳送Array的話, 可以打上[值,值,值]

要傳送Object的話, 可以使用JSON字串, ex:{"key":"value","key2","value2"}

以下為.net的程式碼。
/// .net 傳 Array, Flash 接 Array
/// .net 的這種 Array , 需要填入同型別的物件, 且一開始就要指定長度。
public string[] getArray() {
return new string[] { "1", "2", "3" };
}
/// .net 傳 ArrayCollection , Flex 接 ArrayCollection
/// 但 Flash 無法使用
public ArrayCollection getArrayCollection() {
ArrayCollection _array = new ArrayCollection();
_array.Add("我是Array0String");
_array.Add(0);
_array.Add(.5);
_array.Add(true);
return _array;
}
/// .net 回傳 DataTable, Flash 接 Array, 但格式不好分析
public DataTable getDataTable() {
DataTable _dt = new DataTable("phones");
_dt.Columns.Add("name", typeof(string));
_dt.Columns.Add("mobile", typeof(string));
_dt.Rows.Add(new object[] { "no", "0912345678" });
_dt.Rows.Add(new object[] { "n1", "0916549879" });
_dt.Rows.Add(new object[] { "n2", "0912" });
return _dt;
}
/// 加上 DataTableType 屬性, 預設回傳的是 ArrayCollection,
/// 需更改service.config裡的設定, flash 接才會是 Array ,裡面放UserVO類別
/// In this sample the result is an array of untyped objects.
/// Please note that service.config defines the channel property
/// true
/// as there is no ArrayCollection in Flash AS3.
/// The AS2 Recordset class is missing too.
[DataTableType("vo.UserVO")]
public DataTable getDataTableTypeIsUserVO() {
DataTable _dt = new DataTable("User");
_dt.Columns.Add("name", typeof(string));
_dt.Columns.Add("age", typeof(int));
_dt.Columns.Add("sex", typeof(string));
_dt.Rows.Add(new object[] { "milkmidi", 1, "男" });
_dt.Rows.Add(new object[] { "milkmidi2", 1, "男" });
return _dt;
}
/// .net 傳送 UserVO 類別
/// flash 接就直接是該類別, (Flash也要有一個一模一樣的UserVO.as類別來對映)
/// 且要使用 registerClassAlias("vo.UserVO", UserVO); 注冊一次
public UserVO getUserVO() {
return new UserVO() {
name = "milkmidi",
age = 20,
email = "xxx@xx.com"
};
}
/// .net 傳 ByteArray, Flash 接 ByteArray
public ByteArray getByteArray() {
Byte[] bytes = null;
string _file = "demo300x300.jpg";
string _mapPath = System.Web.HttpContext.Current.Server.MapPath(_file);
FileStream fs = new FileStream(_mapPath, FileMode.Open, FileAccess.Read);
bytes = new Byte[(int)fs.Length];
fs.Read(bytes, 0, (int)fs.Length);
MemoryStream ms = new MemoryStream(bytes);
ByteArray _byteArray = new ByteArray(ms);
return _byteArray;
}
SourceCodeDownload
留言
然後在呼叫時,一起把session送給.net去判斷