如果不知道什麼是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 ///SourceCodeDownloadtrue /// 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; }
留言
然後在呼叫時,一起把session送給.net去判斷