专著于富媒体技术~
本站某些作品来源于互联网,如果侵犯了您的利益,请留言说明
     关于远程访问在本系列文章中陆续的写了不少示例了,本文没有准备深入的去探讨,为了巩固FluorineFx网关的学习和使用。于此,本文将使用FluorineFx网关来提供数据服务等多项功能来介绍通过FluorineFx实现远程访问的相关知识点。

     FluorineFx提供的远程访问包括有很多方面的知道点,本文只介绍其中的三个知识点:访问远程对象返回对象,返回DataTable,返回DataSet对象.FluorineFx安装包里自带有相关的示例程序,要学习更多可直接参考这些示例程序。

     在实现访问前我们同样来做一些准备工作,建立好远程对象,如下:

namespace Fluorine.ServiceLibrary
{
    public class Book
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Author { get; set; }
        public double Price { get; set; }
    }
}


     下面是提供Flex访问的远程对象:


namespace Fluorine.ServiceLibrary
{
    [RemotingService]
    public class FluorineService
    {
        /// <summary>
        /// 返回一个简单对象
        /// </summary>
        /// <returns></returns>
        public Book GetBook()
        {
            return new Book
            {
                Id = 1,
                Name = "《三国演义》",
                Author = "罗贯中",
                Price = 100
            };
        }

        /// <summary>
        /// 返回DataTable对象
        /// </summary>
        /// <returns></returns>
        [DataTableType("Fluorine.ServiceLibrary.Book")]
        public DataTable GetDataTable()
        {
            DataTable dt = new DataTable("Book");
            dt.Columns.Add("Id", typeof(int));
            dt.Columns.Add("Name", typeof(string));
            dt.Columns.Add("Author", typeof(string));
            dt.Columns.Add("Price", typeof(double));

            DataRow dr = dt.NewRow();
            dr["Id"] = 1;
            dr["Name"] = "《三国演义》";
            dr["Author"] = "罗贯中";
            dr["Price"] = 52.30;
            dt.Rows.Add(dr);

            dr = dt.NewRow();
            dr["Id"] = 2;
            dr["Name"] = "《西游记》";
            dr["Author"] = "吴承恩";
            dr["Price"] = 39.91;
            dt.Rows.Add(dr);

            return dt;
        }

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

            DataRow dr = dt.NewRow();
            dr["Id"] = 1;
            dr["Name"] = "《三国演义》";
            dr["Author"] = "罗贯中";
            dr["Price"] = 52.30;
            dt.Rows.Add(dr);

            dr = dt.NewRow();
            dr["Id"] = 2;
            dr["Name"] = "《西游记》";
            dr["Author"] = "吴承恩";
            dr["Price"] = 39.91;
            dt.Rows.Add(dr);

            return ds;
        }

    }
}


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

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



一、返回对象示例

[Binable]
private var book:BookVO;
    
private function onGetBookHandler(evt:ResultEvent):void
{
    book=evt.result as BookVO;
}



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

<mx:Button label="Book" click="ro.GetBook()"/>
<mx:TextInput width="302" text="{boo.Name+book.Author+book.Price}"/>



二、返回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:DataGridColumn headerText="作者" dataField="Author"/>
            <mx:DataGridColumn headerText="价格" dataField="Price"/>
    </mx:columns>
</mx:DataGrid>


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

[Binable]
private var books:ArrayCollection;


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



三、返回DataTable对象

private function onGetDataSetHandler(evt:ResultEvent):void
{
    books=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 books:ArrayCollection;
            [Binable]
            private var book:BookVO;
            
            private function onGetBookHandler(evt:ResultEvent):void
            {
                book=evt.result as BookVO;
            }
            
            private function onGetDataTableHandler(evt:ResultEvent):void
            {
                books=evt.result as ArrayCollection;
            }
            
            private function onGetDataSetHandler(evt:ResultEvent):void
            {
                books=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="{books}">
        <mx:columns>
                <mx:DataGridColumn headerText="编号" dataField="Id"/>
                <mx:DataGridColumn headerText="书名" dataField="Name"/>
                <mx:DataGridColumn headerText="作者" dataField="Author"/>
                <mx:DataGridColumn headerText="价格" dataField="Price"/>
        </mx:columns>
    </mx:DataGrid>
    <mx:ControlBar>
        <mx:Button label="DataTable" click="getDataTable()"/>
        <mx:Button label="DataSet" click="getDataSet()"/>
        <mx:Button label="Book" click="ro.GetBook()"/>
        <mx:TextInput width="302" text="{boo.Name+book.Author+book.Price}"/>
    </mx:ControlBar>
    </mx:Panel>
    <mx:RemoteObject id="ro" destination="fluorine" >
        source="Fluorine.ServiceLibrary.FluorineService"
        fault="onFaultHandler(event)"
        <mx:method name="GetBook" result="onGetBookHandler(event)"/>
        <mx:method name="GetDataTable" result="onGetDataTableHandler(event)"/>
        <mx:method name="GetDataSet" result="onGetDataSetHandler(event)"/>
    </mx:RemoteObject>
</mx:Application>


            


出处:Bēniaǒ成长笔记
转载时必须以链接形式注明出处及本声明!



发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
昵称   密码   游客无需密码
网址   电邮   [注册]
               

验证码 不区分大小写