摘要:本文以“簡易留言板”的開發過程為例,研究了利用FluorineFx提供的Flash Remoting網關為中介,使用ASP.NET進行Flash(AS3.0)后臺開發的基本原理和過程。
關鍵詞:Flash后臺;FluorineFx;ASP.NET;數據庫
在近年來十分熱門的RIA領域,Flash是絕對的主流技術,但是由于AS3.0不具有直接訪問數據庫的功能,Flash只能用于應用程序前臺的開發,如需后臺就必須通過PHP、JSP、ASP.NET等后臺技術實現。本文以“簡易留言板”的開發過程為例,研究了通過FluorineFx連接的基于ASP.NET的Flash后臺開發技術。
1、安裝FluorineFx,創建FluorineFx網關
FluorineFx是一個開源的.NET服務器端插件,Flash通過由它提供的Flash Remoting網關實現與ASP.NET的數據交換。其官方下載地址為http://www.fluorinefx.com/download.html,可下載當前的最新版本FluorineFx v1.0.0.15進行安裝,但要注意FluorineFx作為一個插件一定要在安裝Microsoft Visual Studio之后安裝。
安裝完成后,打開Visual Studio 2008,執行【文件】|【新建】|【網站】命令,在彈出的“新建網站”對話框中選擇“FluorineFx ASP.NET WebSite”,點擊“確定”創建一個FluorineFx網站項目(本例中項目名稱為默認的WebSite1)。該項目解決方案資源管理器中的“Gateway.aspx”就是網關文件,運行Gateway.aspx,得到一個地址:http://localhost:4328/WebSite3/Gateway.aspx,這個地址就是Flash用來連接ASP.NET后臺的通信網關地址。
2、建立數據庫
本例的數據庫只需要一個表,用來存儲留言信息。打開Microsof SQL Server 2005并連接到服務器,新建一個名為“MessageBoard”的數據庫,在該數據庫中新建一個名為“Message”的表。該表需要兩列,一列存儲每條留言的編號,一列存儲每條留言的文字內容。對表的列名、數據類型和是否允許空進行編輯,第一行分別輸入“序號”、“int”、不允許空;第二行分別輸入“內容”、“text”、允許空,并設置“序號”列為主鍵。為使“序號”列能夠自動編號,在“列屬性”中將“標識規范”設置為“是”。保存表,數據庫建立完畢。
3、服務端開發
Flash與ASP.NET后臺的通信,實際上就是Flash客戶端通過FluorineFx提供的遠程服務(RemotingService)調用ASP.NET服務端的遠程對象(RemotingObject)的過程。所以,服務端的開發主要就是遠程對象的編寫。
首先,在項目WebSite1解決方案資源管理器的“App_Code”文件夾下添加一個名為“MesClass.cs”的類文件,這個類將作為遠程服務對象。如果沒有“App_Code”文件夾,則在根目錄下新建一個。
在MesClass類的命名空間列表下方添加以下三行代碼:
using System.Data.SqlClient;
using FluorineFx;//導入FluorineFx命名空間
[RemotingService]//FluorineFx通過為遠程對象添加此標記提供遠程對象服務
類體代碼如下:
public class MesClass {
public MesClass( ){ }
public void write(string mes) { //向數據庫寫入留言內容數據
//創建和打開數據庫連接
String strConn = \"Server=20101129-1445\\\\SQLEXPRESS;DataBase=MessageBoard;Integrated Security=SSPI;uid=sa;pwd=123456\"; //20101129-1445為本地計算機名稱
SqlConnection conn = new SqlConnection(strConn);
conn.Open();
//向Message表中插入數據
SqlCommand nonquery = conn.CreateCommand();
nonquery.CommandText = \"INSERT INTO Message VALUES('\"+mes+\"')\";
nonquery.ExecuteNonQuery();
return; }
public String read( ) { //從數據庫讀取全部留言數據
//創建和打開數據庫連接
String strConn = \"Server=20101129-1445\\\\SQLEXPRESS;DataBase=MessageBoard;Integrated Security=SSPI;uid=sa;pwd=123456\";
SqlConnection conn = new SqlConnection(strConn);
conn.Open();
//執行查詢命令
SqlCommand selectCommand = new SqlCommand(\"SELECT * FROM Message\", conn);
SqlDataReader reader = selectCommand.ExecuteReader();
//逐條讀取留言信息,并按順序連接到字符串messages之后
String messages=\"\";
while (reader.Read( )) {
for (int i = 0; i < reader.FieldCount; i++) {
if (i == 0) messages += \"第\" + reader[i].ToString() + \"樓\\";
else messages += reader[i].ToString() + \"\--------------------------------------\\"; } }
reader.Close(); //關閉讀取
conn.Close(); //關閉連接
return messages; //返回字符串messages } }
4.客戶端開發
Flash客戶端使用NetConnection類連接網關并調用遠程對象,使用Responder類處理來自服務器的返回值。
新建一個Flash文件(AS3.0),在舞臺上創建一個TextArea組件實例(用于顯示所有留言),一個TextField輸入文本實例(用于輸入留言)和一個Button組件實例(用于發表留言),分別命名為message_txt、input_txt和post_btn。然后,新建一個類名為“Main”的ActionScript類文件,并將這個類設置為flash文件的文檔類。Main類的代碼如下:
package {
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.text.TextField;
//導入NetConnection和Responder類,它們位于flash.net包中
import flash.net.NetConnection;
import flash.net.Responder;
public class Main extends Sprite {
public var nc:NetConnection=new NetConnection( ); //創建NetConnection對象
public function Main( ):void {
nc.connect(\"http://localhost:4328/WebSite3/Gateway.aspx\"); //連接網關
getMessages( );
post_btn.addEventListener(MouseEvent.CLICK,btnClick);
message_txt.editable=1; }
function getMessages( ):void { //將數據庫中的留言信息顯示到message_txt中
var responder:Responder=new Responder(result,status); //創建Responder對象
//調用遠程對象MesClass的read函數。如果調用成功,則返回值作為參數傳遞給result函數并調用result函數;如果調用失敗,則返回的錯誤信息作為參數傳遞給status函數并調用status函數
nc.call(\"MesClass.read\",responder);
function result(result:String):void {
message_txt.text=result; message_txt.verticalScrollPosition=message_txt.maxVerticalScrollPosition; }
function status(status:String):void {
message_txt.text=status; } }
function btnClick(e:MouseEvent):void { //發表留言
var responder:Responder=new Responder(result,status);
//調用遠程對象MesClass的wirte函數,并將輸入內容作為參數傳遞給wirte函數
nc.call(\"MesClass.write\",responder,input_txt.text);
function result(result:String):void {
getMessages( );
input_txt.text=\"發表成功!\"; }
function status(status:String):void {
input_txt.text=\"發表失敗!\"; } } } }
運行Flash影片,即可測試這個留言板應用程序。
以上就是利用FluorineFx所提供的Flash Remoting網關為中介,使用ASP.NET進行Flash(AS3.0)后臺開發的基本原理和過程。
參考文獻:
[1]呂輝等.完全手冊Flash/Flex ActionScript 3.0交互式開發詳解:語法基礎、典型應用、視頻網站實戰[M].北京:電子工業出版社,2008:341-346.
[2]張正禮,陳文臣,何昀峰.ASP.NET 3.5簡明教程(C#2008篇)[M].北京:清華大學出版社,2010.