Flex与ASP.NET通过Remoting方式交互

10 篇文章 0 订阅
5 篇文章 0 订阅

Flex与ASP.NET通过Remoting方式交互

说明文档

本文是关于Flex与ASP.NET通过Remoting方式进行通讯的内容, 本文将通过一个示例来介绍Flex与ASP进行数据交互的服务端和客户端所需的配置情况,以及二者通信的过程。

1.      软件

1、Flex平台:Adobe Flex Builder 4.5

2、.Net平台:Visual Studio .Net 2008

3、Remoting网关:Fluorine

2.       介绍

Flex.NET服务端的通信可以通过WebService、HTTPService、URLLoader以及FielReference等组件或类来完成,通过这些方式来完成与服务端的通信是非常方便和简单的,但它们的缺点就是通信数据量较小,如要传输大量的数据或是实现不同对象的序列化传输,它们则满足不了需求,需要寻找另外一种通信协议,另一种高效的传输协议来代替SOAP协议传输的方案,那便是AMFActionScript Message Format)协议。

Fluorine是一种开源的AMF(ActionScript Messaging Formatter)网关,专门负责Flex与.Net交互时的数据类型转换。Fluorine现支持ActionScript 2.0和ActionScript 3.0,Fluorine也可作为Flash.Net交互时的AMF网关。

Fluorine主要优点:

(1)交互时数据类型的自动转换。因为Flex与.NET的数据类型是不同的,例如Flex的Date与.NET中的DateTime类型。这样就导致Flex 与.NET进行数据交互过程中必须进行数据类型的转换。这种数据类型的转换我们可以自己通过编写相关的代码来实现,例如在Flex及.NET中编写一个实体类对其取得的数据进行类型转换。而利用Fluorine这种网关来实现数据交互的话,它能够实现.NET与Flex中的数据类型的自动对应转换,这样从一定程度上就减轻了我们对其数据类型处理的烦恼。

(2)交互效率的提高:利用网关进行数据交互的话,它使得Flex能够直接与.Net的数据处理类进行通信,而不必像再通过另一层中间数据交互层来实现,从一定程度上它的交互效率会提高很多。

3.      基本配置

3.1.      服务器端的搭建

(1)安装FluorineFx,安装完后在目录中会有“Source”及“Samples”两个文件夹,“Samples”文件夹中包含了一些在VS环境中使用Fluorine的例子。“Source”文件夹中包含了有关Fluorine的源代码。

(2)首先确定项目创建后的存储位置,譬如说在本例中暂定该示例项目的所有文件存储在D:\DEMO中,在D盘中新建文件目录D:\DEMO\Fluorine,在IIS的默认网站右键点击新建虚拟目录


(3) 安装好Fluorine之后,系统自动在VS.Net 2008新建网站中增加一个模板:FluorineFx ASP.NET Web Application。选择该模板,创建一个.NET网站。


(4)利用VS的模板进行创建后,系统会自动加载一些引用,以及创建相关文件,并进行简单配置。创建完后的项目结构如图所示:

      


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

 【这里有两种途径:一是 新建一个FluorineFx ServiceLibrary类库文件,将所有的数据处理类放到库中上,然后在网站中调用此类库(如以下步骤5-7);二是将所有的数据处理类放在 ASP。Net文件夹App_Code中,App_Code中,.net自动编译

(5) 通过Microsoft Visual Studio 2008 创建解决方案,并添加FluroineFx服务库到网站,依次点击:文件---新建---项目,设置如下图所示:


(6)FluorineFx服务库添加成功后,项目模板会自动为我们创建一个Sample类和一个Echo方法,如下:


(7) 为网页添加引用,添加成功后网站会自动引用FluorineFx服务库的dll

 

 

3.2.      客户端的配置

   客户端的配置有三种方法,(三者选一就可以)一种是通过向导来设置参数,从而创建Flex;二是通过指定services-config.xml配置文件来设置;第三种是利用第三方组件RemoteObjectAMF0来连接,这种方式就不用再去配置services-config.xml。

(作者建议:用配置方法好点,方便简单,测试过可行。其它二种没测试过)

3.2.1.      向导设置方法:

(1)新建Flex工程。


(2) 将应用服务器类型设置为:ASP.NET,将服务器设置为:"使用Internet Information Services (IIS)",Web 应用程序根目录指向FluorineFx网站的根路径,Web 应用程序URL则设置为网站在IIS中的配置路径, 按照上面步骤配置好后通过点击“验证配置”进行配置验证,如过验证结果是: Web应用程序根目录和 URL有效.则代表配置正确,具体如下图所示:

 


3.2.2.  services-config.xml配置文件来设置

3.2.3. 利用第三方组件RemoteObjectAMF0来连接:


4.      通信过程

1、在VS中编写数据处理类HelloWorld.cs文件,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查看远程服务类文件,以及调用该服务的ActionScript。例如可以在上页类文件中设置断点,然后将 Console.aspx设置为起始页,启动项目。页面会跳转到Fluorine.aspx页面,当调用FromFluorine()函数时,就会中断。下图是对函数所进行的调用结果。


2、配置客户端,创建Flex项目

<?xmlversion="1.0" encoding="utf-8"?>

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"                  

                xmlns:s="library://ns.adobe.com/flex/spark"                  

                xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">  

     <fx:Script>

         <![CDATA[         

              importmx.rpc.events.FaultEvent;

              importmx.rpc.events.ResultEvent;

              importmx.controls.Alert;

             

              publicfunction clickBtnHelloWorld():void{

                   sampleRemoteObject.FromFluorine(this.txtHelloWorld.text);

              }

              publicfunction RemoteResult(re:ResultEvent):void

              {

                   varstr:String = re.result as String;

                   Alert.show(str);

              }            

              protectedfunctionsendRemoteService_faultHandler(event:FaultEvent):void                 

              {

                   // TODO Auto-generated method stub  

              }

              publicfunction RemoteFault(re:FaultEvent):void

              {

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

              }          

         ]]>     

     </fx:Script> 

     <fx:Declarations>

         <s:RemoteObject id="sampleRemoteObject" endpoint="../Gateway.aspx"

           destination="fluorine" source="FluorineHelloWorld.HelloWorld"fault="sendRemoteService_faultHandler(event)">        

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

         </s:RemoteObject>     

     </fx:Declarations>

     <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>

</s:Application>

这里创建了一个RemoteObject对象,并设置了其id属性,“destination”指向services-config.xml中的“destination”的id,source对应VS类,前面 FluorineHelloWorld是命名空间,后面HelloWorld是类名。RemoteObject中创建了一个method方法,“name”属性跟所要调用的VS类中的函数名相同,“result”设置返回结果后的处理事件,“fault”设置交互过程中出错后的处理事件 。

3、运行Flex,结果如下:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值