Flex 答客問2:Flex 2 and .NET, a nice pair ?
—-
您好,我想请教一下,flex能用在asp.net环境下吗?
我意思是说能不能在IIS6.0下面建立mxml的运行平台.
因为我主要是用c#编程,c#在我用起来更容易上手相对java而言.flex对于页面的设计是最好的了.
我的想法就是C#做后台逻辑编程,flex做前台设计页面.
不知有没有相关的方法可以学习?
thx:)
—-
Flex 2 與 .NET 是否能夠搭配運行一直是 forum 與 mailing list 上熱門的 faq,今天正好一次整理出來。
基本上 Flex與後台 (Application server)交換資料的方式有下列四種:
-HttpService
-Web Service
-Remote Object
-FDS (Data Service, Messaging)
分別介紹如下:
1、HttpService
這是最簡單也最常見的資料交換方式,就是透過 Http get/post 來傳純文字資料,大部份 web application 都是這樣運作的。
這個方式的好處是非常普及,所有的後台系統一定都可以吃的下這種資料,但缺點則是 complex data type 要經過複雜的序列化與解序列化程序才能在 client/server間交換。
以 .NET 來說,任何一個 asp.net 的頁面都可以透過 get/post 與 flex client 交換資料。
2、WebService
WebService 也是很常見的選擇,好處是規則共通方便不同技術平台交換資料,缺點則同樣是某些複雜資料結構無法輕易的交換,在編碼與解碼的過程中往往會出現意外,例如 Date 的表現方式。
以 .NET 來說,使用 web service 應該是再方便不過的選擇,只要把 asmx 檔案準備好再從 flex client 呼叫即可。
3、Remote Object
這就是傳統的 Flash Remoting, 透過 AMF 以 binary 的方式來回交換資料,主要優點是體積小且支援 flash native object,例如 Array, Value Object 等都可直接傳送,在 server 端也會自動對應到正確的 type。
但由於 Flex 2 (或者應該說是 Flash Player 9 / AS3)使用的是新式的 AMF3 格式,而目前 Adobe 官方販售的 flash remoting for .net (與 open source 的 fluorine只支援舊版的 AMF0,因此沒辦法直接裝了就用。
edit: Fluorine 現在已支援 AMF3。
變通方法則是直接操作 flash.net.NetConnection 並指定使用 AMF0 與 server連線即可;Renaun 寫了一個小工具方便大家操作,可以下載直接使用。
附帶一提,這個小工具也同時適用於 AMFPHP/OpenAMF等各種 AMF0-only 的remoting gateway,所以如果你寫 Flex 2 又想透過 remoting 連接既有的各種 server remoting gateway, 抓這個就沒錯了。
4、FDS (Data Service, Messaging)
Flex Data Service 是 Flex 2 裏新出現的技術,主要目地是希望提供更自動的方法來讓 client 與 server 交換資料,它的核心實際上仍然是 AMF 與 RTMP (對,就是 Flash Media Server 用的那種),部份功能也與 FMS 重疊,但它著重在 Data Sharing 與 Exchange 這部份。
目前 FDS 只有 Java 的版本,也就是 server 端要用 java 寫,但 Adobe 宣稱將來會有 FDS for .NET 版。
不過好消息是,有一家叫 theMidnightCoders 的公司搶先推出了 FDS 相容版本,不但同時支援 AMF0 與 AMF3,更支援部份 FDS 的功能(主要是資料同步的部份,與server端的衝突處理與資料儲存)。
以 .NET 來說,付費的選擇中 weborb 算是目前最優的選擇,價錢只有官方版的一半,但功能更完整;而免錢的選擇則當非 Fluorine 莫屬。
*結論
所以簡單的結論是,.NET 當然可以愉快的與 Flex 2合作,通常最熱門的選擇是 web service, 因為大部份使用 .NET 的人都對這個方式比較熟悉,但我個人比較偏好 flash remoting,主要著眼於它 binary 傳輸的特性跟支援 native type,讓資料在 client / server 端傳送與處理上比較方便。
所以如果要用 .NET 做後台,只要把 Flex 裏編譯好的 swf 檔放到 wwwroot 下就可以執行了。
至於學習資料方面,Flex 手冊裏關於 WebService 物件的操作可以多看一下,至於 remoting 部份則可以找任何一本有講 Flash remoting 的書(例如 Flash Remoting: The Definitive Guide 裏面就有介紹如何使用 NetConnection 連接 remoting gateway)。


14 Comments Add your own
1. CAMES&hellip | July 31st, 2006 at 11:51 am
FLEX有沒有類似FCKEditer這類的Rich Text Editer,
如果沒有,那我要如何與網頁的FCKEditer整合啊!
2. saicn&hellip | July 31st, 2006 at 12:31 pm
对的,所以我现在就是 用的 flex2 +.net wsdl上
3. jeremy&hellip | July 31st, 2006 at 2:27 pm
Flex 2 有內建一個 Rich Text Editor 啊,在 Control 那一類裏面找一下就有。
4. henry&hellip | August 11th, 2006 at 11:04 am
想请教个问题。
通过Flex调用.NET WebService方法,由于方法参数类型是ArrayList(不定类型数组)
那如何映射Flex在建Array里的成员类型对应相关.NET类型。
5. jeremy&hellip | August 11th, 2006 at 12:03 pm
Jesse Warden 有個 Flex 2 + web serice 的範例:
http://tinyurl.com/evxou
看裏面的 com.jxl.amazon.business.SearchDelegate.as 就有示範如何將取回的 raw XML(ArrayList) 轉換為 Flex 內的 value object (BookVO)。
基本上一切都是手工藝,用 E4X 去 parse xml 後再重組回 VO。
6. henry&hellip | August 11th, 2006 at 1:27 pm
我要的效果刚好是相反。
不过发现一个奇怪的问题在Flex的Array存储的是Object
时,把它作为参调用WebService 时会产生相关的XML描述。
当Array存储自定义类调用WebService确没有产生相关XML描述。
请问是不是在自定义类时需要加上可序列化的标记?
7. jeremy&hellip | August 13th, 2006 at 11:52 pm
這個問題很有趣,我正在研究中,有結果時會回信給你。
8. jeremy&hellip | August 16th, 2006 at 11:57 am
啊 有結果了,答案是:adobe 官方也知道有這個問題,而且從 v1.5時代就有,到現在一直沒修好,確實是跟 WDSL 有關,目前官方的工程師已經在調查了,有結果時我會再貼上來。
btw, 用 flash remoting 就不會有這種問題啊~
9. dannyr&hellip | August 18th, 2006 at 9:43 am
答非所问!
10. jeremy&hellip | August 18th, 2006 at 10:19 am
which part are you referring to ?
11. usherlight&hellip | August 29th, 2006 at 12:06 pm
—————
open source 的 fluorine只支援舊版的 AMF0
—————
Fluorine现在已经支持AMF3
12. jeremy&hellip | August 29th, 2006 at 1:27 pm
感謝,已更新。
13. Troy&hellip | September 4th, 2007 at 6:49 pm
Hello我是一個剛開始學習Flex的新手,過去是C#/VB.NET的程式設計師,目前對於與資料庫溝通方式也從網路上略為知道幾種方式,目前在Remoting和Web service當中想要選擇一種,目前看來就是效率與使用便利性上的選擇了,不過小弟對於趨勢就不是很了解了,所以想要請教目前趨勢上,使用哪一種在將來會是比較受發展者所青睞的技術呢?
14. jeremy&hellip | September 4th, 2007 at 7:32 pm
呃,這個問題很像在問 windows or mac 比較好,不論怎麼回答都會有人抗議啊~:D
以我的觀點,remoting (或正確一點說是 AMF 這個格式)有著絕對的優勢,體積小,又支援 native object,目前市場上配套的 solution 也挺多,是很好的選擇。
Trackback this post | Subscribe to the comments via RSS Feed