Flex与ASP.NET通过Remoting方式交互基本思路

系统基于Flex的表现层与基于ASP.NET的业务逻辑层之间的通信方式主要采用Remote Object,即采用Adobe定义的AMF通信协议,通过使用第三方协议通信网关解析软件Fluorine作为中间件实现Flex与ASP.NET之间的通信。本文将使用FluorineFx网关来提供数据服务等多项功能来介绍通过FluorineFx实现远程访问的相关知识点。 FluorineFx提供的远程访问包括有很多方面的知识点,本文主要介绍其中的三个知识点:访问远程对象返回对象,返回DataTable,返回DataSet对象(返回的对象需要能够在服务器端和flex端都可以被解析,如果在服务器端返回一个复杂的对象那么在flex端就需做相应复杂的对象解析工作)。

一、 在实现访问前建立好远程对象: 

namespace Fluorine.ServiceLibrary
{
    public class Disaster
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
}

二、返回Flex访问的远程对象:

namespace Fluorine.ServiceLibrary
{
    [RemotingService]
    public class FluorineService
    {
        /// <summary>
        /// 返回一个简单对象
        /// </summary>
        /// <returns></returns>
        public Disaster GetDisaster()
        {
            return new Disaster
            {
                Id = 1,
                Name = "滑坡",
            };
        }
        /// <summary>
        /// 返回DataTable对象
        /// </summary>
        /// <returns></returns>
        [DataTableType("Fluorine.ServiceLibrary.Disaster")]
        public DataTable GetDataTable()
        {
            DataTable dt = new DataTable("Disaster");
            dt.Columns.Add("Id", typeof(int));
            dt.Columns.Add("Name", typeof(string));

            DataRow dr = dt.NewRow();
            dr["Id"] = 1;
            dr["Name"] = "滑坡";

            dr = dt.NewRow();
            dr["Id"] = 2;
            dr["Name"] = "崩塌";
            return dt;
        }

        /// <summary>
        /// 返回DataSet对象
        /// </summary>
        /// <returns></returns>
        [DataSetType("Fluorine.ServiceLibrary.Disaster ")]
        public DataSet GetDataSet()
        {
            DataSet ds = new DataSet("DS");
            DataTable dt = ds.Tables.Add("Disasters");
            dt.Columns.Add("Id", typeof(int));
            dt.Columns.Add("Name", typeof(string));

            DataRow dr = dt.NewRow();
            dr["Id"] = 1;
            dr["Name"] = "滑坡";
            dt.Rows.Add(dr);

            dr = dt.NewRow();
            dr["Id"] = 2;
            dr["Name"] = "崩塌";
            dt.Rows.Add(dr);

            return ds;
        }

    }
}

三、 上面代码片段中分别提供了返回一个对象,DataTable以及DataSet对象的方法。这里只需要记住两个关键标识就行,它门是:DataTableType和DataSetType.  下面通过Flex的非可视化组件<mx:RemoteObject>来访问远程对象,具体怎么来调用如下所示。 

<mx:RemoteObject id="ro" destination="fluorine" >
            source="Fluorine.ServiceLibrary.FluorineService"
            fault="onFaultHandler(event)"
            <mx:method name="GetDisaster" result="onGetDisasterHandler(event)"/>
            <mx:method name="GetDataTable" result="onGetDataTableHandler(event)"/>
            <mx:method name="GetDataSet" result="onGetDataSetHandler(event)"/>
        </mx:RemoteObject>

(1)、返回对象示例

            private var disaster:DisasterVO;
            
            private function onGetDisasterHandler(evt:ResultEvent):void
            {
                disaster =evt.result as DisasterVO;
            }

     通过点击按扭调用远程方法GetDisaster()完成方法的调用,直接可以将返回结果绑定到界面元素上。

<mx:Button label="Disaster" click="ro.GetDisaster()"/>
        <mx:TextInput width="302" text="{ disaster.Name+ disaster.ID }"/>

(2)、返回DataTable对象

     返回DataTable和DataSet,将结果绑定到DataGrid上显示,先看看DataGrid的定义:

        <mx:DataGrid x="10" y="10" width="543" height="147" dataProvider="{books}">
            <mx:columns>
                <mx:DataGridColumn headerText="编号" dataField="Id"/>
                <mx:DataGridColumn headerText="名称" dataField="Name"/>
            </mx:columns>
</mx:DataGrid>

 DataGrid的数据源为定义的一个ArrayCollection对象,详细如下:

[Binable]
            private var disasters:ArrayCollection;
            private function onGetDataTableHandler(evt:ResultEvent):void
            {
                disasters=evt.result as ArrayCollection;
            }

(3)、返回DataTable对象

private function onGetDataSetHandler(evt:ResultEvent):void
            {
                disasters =evt.result as ArrayCollection;
            }

 如上便完成了通过FluorineFx网关来实现远程访问,下面是完整的Flex端代码:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:Script>
        <![CDATA[
            import mx.controls.Alert;
            import mx.rpc.events.ResultEvent;
            import mx.rpc.events.FaultEvent;
            import mx.collections.ArrayCollection;
            [Binable]
            private var disasters:ArrayCollection;
            [Binable]
            private var disaster:DisasterVO;
            
            private function onGetDisasterHandler(evt:ResultEvent):void
            {
                disaster =evt.result as DisasterVO;
            }
            
            private function onGetDataTableHandler(evt:ResultEvent):void
            {
                disasters=evt.result as ArrayCollection;
            }
            
            private function onGetDataSetHandler(evt:ResultEvent):void
            {
                disasters=evt.result as ArrayCollection;
            }
            
            private function onFaultHandler(evt:FaultEvent):void
            {
                Alert.show(evt.fault.faultDetail);
            }
        ]]>
    </mx:Script>
    <mx:Panel x="42" y="56" width="578" height="226" layout="absolute" fontSize="12">
        <mx:DataGrid x="10" y="10" width="543" height="147" dataProvider="{disasters}">
            <mx:columns>
                <mx:DataGridColumn headerText="编号" dataField="Id"/>
                <mx:DataGridColumn headerText="名称" dataField="Name"/>
        
            </mx:columns>
        </mx:DataGrid>
        <mx:ControlBar>
            <mx:Button label="DataTable" click="getDataTable()"/>
            <mx:Button label="DataSet" click="getDataSet()"/>
            <mx:Button label="Disaster" click="ro.GetDisaster()"/>
            <mx:TextInput width="302" text="{ disaster.Name+ disaster.ID }"/>
        </mx:ControlBar>
    </mx:Panel>
    <mx:RemoteObject id="ro" destination="fluorine" >
        source="Fluorine.ServiceLibrary.FluorineService"
        fault="onFaultHandler(event)"
        <mx:method name="GetDisaster " result="onGetDisasterHandler(event)"/>
        <mx:method name="GetDataTable" result="onGetDataTableHandler(event)"/>
        <mx:method name="GetDataSet" result="onGetDataSetHandler(event)"/>
    </mx:RemoteObject>
</mx:Application>

 

转载于:https://www.cnblogs.com/xlyeaco/archive/2012/04/25/2469231.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值