利用Fluorine實現Flex與.net的通訊(.net)

          利用Fluorine實現Flex與.net的通訊(.net)
          2009/05/22 01:06 P.M.

           

           

           

           

          1、服務器端的搭建: 1)安裝FluorineFx,安裝完后在目錄中會有“Source”及“Samples”兩個文件夾,“Samples”文件夾中包含了一些在VS.Net環境中使用Fluorine的例子。“Source”文件夾中包含了有關Fluorine的源代碼。(代碼未具體去研究)

           

          2)安裝好Fluorine之后,系統自動在VS.Net 2008新建網站中增加一個模板:FluorineFx ASP.NET Web Application。選擇該模板,創建一個.NET網站。

                                                                                       

           

          3.1

          a)打開Visual Studio 2008,分別選擇 文件 -> 新建 -> 網站
               b)
          選擇已安裝模板“FluorineFx ASP.NET Web Application”

          c)運行項目,獲取.NET自帶服務器生成的端口,及網址,本項目中是 http://localhost:4166/FluorineTest/

          3)利用VS的模板進行創建后,系統會自動加載一些引用,以及創建相關文件,并進行簡單配置。創建完后的項目結構如圖所示:

          3.2

          Bin”中的Dll就是用Fluorine的源文件所生成的程序集,“Templates”是一些模板。“WEB-INF/flex”中包含了XML都是些配置文件。“Gateway.aspx”是個空頁面,其網頁地址就是Fluorine的網關地址。

          2、客戶端的配置:

             客戶端的配置有三種方法,一種是通過向導來設置參數,從而創建Flex;另一種是通過指定services-config.xml配置文件來設置;第三種是利用第三方組件RemoteObjectAMF0來連接,這種方式就不用再去配置services-config.xml。(推薦用第三種方法)

          1)向導設置方法:

          步驟1. 新建Flex工程。選擇ColdFusion Flash Remoting。如圖3.3

          2. 配置服務器。Deployed to J2EE server。如圖3.4

           

           

          2services-config.xml配置文件來設置

           

           

          修改工程的屬性,如圖3.5

          Additional compiler arguments”,設置services-config.xml配置文件的路徑,可以指向剛才建立的VS.Net項目中的“WEB-INF/flex”中的services-config.xml路徑。也可以將services-config.xml這個文件拷貝到調用文件的同級目錄中,然后如上面所設。

           

           

          3)利用第三方組件RemoteObjectAMF0來連接,這種方法講到時再進行介紹。

           

          四、通信過程

          1、在VS.Net中編寫數據處理類HelloWorld.cs文件(可以新建一個FluorineFx ServiceLibrary類庫文件,將所有的數據處理類放到庫中上,然后在網站中調用此類庫,這里就不創建了)。HelloWorld.cs文件的代碼如下所示:

          using System;

          using System.Data;

          using System.Configuration;

          using System.Web;

          using System.Web.Security;

          using System.Web.UI;

          using System.Web.UI.HtmlControls;

          using System.Web.UI.WebControls;

          using System.Web.UI.WebControls.WebParts;

          using FluorineFx;

          namespace FluorineHelloWorld

          {

              /// <summary>

              ///HelloWorld 的摘要說明

              /// </summary>

              [RemotingService()]

              public class HelloWorld

              {

                  public HelloWorld()

                  {

                      //

                      //TODO: 在此處添加構造函數邏輯

                      //

                  }

                  public string FromFluorine(string userName)

                  {

                      return "您好," + userName + "!此消息來自Fluorine Flash Remoting";

                  }

              }

          }

           

          RemotingService屬性并不是必需的,不過使用該屬性,在配置了服務瀏覽器的Web應用上可以通過Console.aspx查看遠程服務類文件,以及調用該服務的ActionScrip。例如可以在上頁類文件中設置斷點,然后將Console.aspx設置為起始頁,啟動項目。頁面會跳轉到Fluorine.aspx頁面,當調用FromFluorine()函數時,就會中斷。下圖是對函數所進行的調用結果。

           

          4.1

          2、配置Flex工程中的services-config.xml。主要是設置這個endpoint屬性。讓其指向之前得到的網關地址,另外就是設置了“destination”。

          <?xml version="1.0" encoding="UTF-8"?>

          <services-config>

              <services>

                  <service id="remoting-service"

                           class="flex.messaging.services.RemotingService"

                           messageTypes="flex.messaging.messages.RemotingMessage">

                      <destination id="fluorine">

                          <channels>

                              <channel ref="my-amf"/>

                          </channels>

                          <properties>

                              <source>*</source>

                          </properties>

                      </destination>

                  </service>

              </services>

              <channels>

                  <channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">

                      <endpoint uri="http://localhost:4166/FluorineTest/Gateway.aspx"

                      class="flex.messaging.endpoints.AMFEndpoint"/>

                  </channel-definition>

              </channels>

          </services-config>

           

           

           

          修改“

           

           

          步驟

          3、如下創建一個MXML文件。

          <?xml version="1.0" encoding="utf-8"?>

          <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

              <mx:Script>

                  <![CDATA[

                      import mx.rpc.events.FaultEvent;

                      import mx.rpc.events.ResultEvent;

                    import mx.controls.Alert;

                 

                  public function clickBtnHelloWorld():void{

                       sampleRemoteObject.FromFluorine(this.txtHelloWorld.text);

                  }

                      public function RemoteResult(re:ResultEvent):void

                      {

                          var str:String = re.result as String;

                          Alert.show(str);

                      }

                 

                      public function RemoteFault(re:FaultEvent):void

                      {

                          Alert.show("Message:" + re.fault.faultString,"出錯");

                      }          

                  ]]>

              </mx:Script>

              <!--這里Source 對應.NET類,前面是命名空間,后面是類名 source = 命名空間.類名-->

              <mx:RemoteObject

                  id="sampleRemoteObject"

                  destination="fluorine"

                  source="FluorineHelloWorld.HelloWorld"

                  showBusyCursor="true">

                 

                  <!--這里是.NET中的方法,name = 方法名 -->

                  <mx:method name="FromFluorine" result="RemoteResult(event)" fault="RemoteFault(event)"/>       

              </mx:RemoteObject>

              <mx:Panel horizontalAlign="center" verticalAlign="middle" width="250" height="200" layout="absolute">

                  <mx:TextInput x="35" y="10" id="txtHelloWorld" />

                  <mx:Button x="82.5" y="40" label="調用" id="btnHelloWorld" click="clickBtnHelloWorld()"/>

              </mx:Panel>

          </mx:Application>

          這里創建了一個RemoteObject對象,并設置了其id屬性,“destination”指向services-config.xml中的“destination”的idsource對應VS.Net類,前面FluorineHelloWorld是命名空間,后面HelloWorld是類名。“showBusyCursor”是指在交互時鼠標的狀態是否為設置為繁忙。

          RemoteObject中創建了一個method方法,“name”屬性跟所要調用的VS.Net類中的函數名相同,“result”設置返回結果后的處理事件,“fault”設置交互過程中出錯后的處理事件

          4、運行Flex,結果如下:

          4.2

          4.3

          五、使用RemoteObjectAMF0來連接fluorine網關

          1、上面連接網關是利用了Flex自帶的RemoteObject組件來實現,利用這個組件來實現的話,需要在創建項目時對項目進行配置,或者利用配置文檔進行配置,這些在上面已經做了詳細的介紹。現在介紹的是利用RemoteObjectAMF0組件來實現。這個組件是一種基于MXML的第三方組件,用于連接AMF網關,同時它是一個開源的組件。

          2、下載RemoteObjectAMF0后解壓,在“src”文件夾中就可以看到關于該組件的源代碼,它基本上是對flex中的RemoteObject組件進行的重寫。可以將“src”文件夾中的“com”文件夾全部拷貝到flex的工程中,也可以將其編譯成庫文件再引用到Flex工程中。

          3、這時將“com”文件夾拷貝到了工程中。要使用該組件,默認情況下,要在MXML文件中的“Applications”標簽中加入命名空間“xmlns:renaun="com.renaun.rpc.*"”。

          4RomoteObjectAMF0組件的定義語法如下所示:

          <renaun:RemoteObjectAMF0 endpoint="http://localhost:4166/FluorineTest/Gateway.aspx" id="sampleRemoteObject" source="FluorineHelloWorld.HelloWorld" showBusyCursor="true">

              <renaun:methods>

                 <renaun:method name="FromFluorine" result="RemoteResult(event)" fault="RemoteFault(event)"/>

              </renaun:methods>

          </renaun:RemoteObjectAMF0>

          RemoteObjectAMF0組件的“endpoint”屬性指明AMF網關地址,“source”屬性指明類的名稱空間,<名稱空間:method>組件的name屬性指向類中的方法,必須與類中的定義相同,result事件處理返回的數據。

          5RemoteObjectAMF0的調用方法跟上面講RemoteObject時差不多,比如都可以通過sampleRemoteObject.FromFluorine(this.txtHelloWorld.text);去調用.NET中的FromFluorine()方法。

          posted on 2010-11-12 11:22 aiaiwoo 閱讀(582) 評論(0)  編輯  收藏 所屬分類: AC3/FLEX

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          常用鏈接

          留言簿

          隨筆分類

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 正镶白旗| 双城市| 徐汇区| 宜宾市| 佛山市| 福海县| 凤阳县| 兴宁市| 共和县| 长子县| 奉新县| 富顺县| 彩票| 右玉县| 宜兰市| 玉门市| 天全县| 苍溪县| 嘉禾县| 新郑市| 肇东市| 格尔木市| 永胜县| 南安市| 双柏县| 金溪县| 洛扎县| 吉水县| 绥德县| 舟山市| 广宁县| 泊头市| 芦溪县| 贡嘎县| 伊通| 安泽县| 抚顺县| 绥芬河市| 济南市| 仙桃市| 鱼台县|