04.18
我常常聽到有人說Flex只要Flex Builder就好,Flex Data Service不用裝沒關係(我也聽過說沒有用的),基本上這樣的說詞算對也算不對,因為端看您專案開發所需的功能來決定,如果您的時間夠多,您就算不用Flex Data Service(以下簡稱FDS)也無所謂,只要您有能力跟時間自己寫一個類似的Server Service就可以了,不過就本人的觀點,這樣的說詞稍微有些偏激,剛好要示範FDS中的Flex Proxy Service,所以就把這段給記憶下來,順便讓大家知道FDS裡面的功能在幹嘛。
我們先寫一段連接Yahoo即時新聞的示範,http://tw.news.yahoo.com/rss/realtime 是Yahoo即時新聞的RSS檔,當我們連結進去後可以發現他的結構為這樣:

因應這個規則,我們將XML中的item全部擷取出來,並秀在DataGrid裡面,所以我們要拿到root.channel.item裡的資料列表,最簡單的寫法如下:
|
<?xml version="1.0″ encoding="utf-8″?> |
讚啊,寫完後執行居然給我跳出失敗(如下圖)。那是當然的,因為這個動作可是違規的存取外部資料喔,那怎麼辦呢?
有寫過ActionScript的人一定腦中跳出一個答案,就是使用一個叫crossdomain.xml的檔案,沒錯就是這招,用了這招就可以跨網域存取了,但是接下來又會衍伸出第二個問題,最好您有強大的交涉手腕,讓Yahoo願意因為做個練習,就在他們的網站中放置一個這樣的檔案。
每次一到這,大家就開始洩氣了,Flash好囉說喔,幹嘛要搞的這麼麻煩,(這一切都是為了安全性 *小小聲說*),這時候FDS中的Flex Proxy Service就是您的救星了,Flex Proxy Service顧名思義,就是讓提供Flash的Server能提供Proxy的功能,替您擷取遠端的檔案,這樣一來就能製造該XML的提供者為同一台機器的假象(我知道用假象怪怪的,但是還是忍不住用一下),所以您可以打開 proxy-config.xml 這個檔案,並將 http://tw.news.yahoo.com/ 這段網址加入即可,加入的範例如下:
|
<destination id="DefaultHTTP"> |
當然您也可以用Flex Builder中的[File > new File]的功能,用Advance的選項製作出一個連結檔案,會較容易管理,最後在 HTTPService 中加入一段屬性宣告 useProxy="true"就可以啟用Proxy功能了,執行效過如下圖,終於可以順利完成了。

|
<?xml version="1.0″ encoding="utf-8″?> |
後記:
若是不想跟DefaultHTTP的Tag混在一起,那可以自己新開一個Tag,例如:
|
<destination id="anistar"> |
若寫成這樣,HTTPService 要記得加入屬性 destination="anistar"才行。
相關文章:
文章內容由宋志峰[ANISTAR]撰寫,引用分享請以鏈結形式註明出處與原始作者。


hi, 宋老師
flex data service是否要安裝在server端,
若我是租用網路空間(無法安裝flex data service),
我在開發時使用livecycle data service的設定,
那丟上server端時,是否可以作用?
PANG
頭昏了。
留了兩次= ="
Server端一定要安裝Livecycle Server才能用喔…
老師你好,
請問proxy config.xml,
一定要在server上安裝fds後,才能找到嗎?
若採用代管的server,我是否可在flex中給予
絕對路徑?
config.xml 只有在開發階段使用而已, 發布時不需要這個檔案.