Flex与.NET互操作(八):使用FluorineFx网关实现远程访问

简介:
   关于远程访问在本系列文章中陆续的写了不少示例了,本文没有准备深入的去探讨,为了巩固FluorineFx网关的学习和使用。于此,本文将使用FluorineFx网关来提供数据服务等多项功能来介绍通过FluorineFx实现远程访问的相关知识点。
     FluorineFx提供的远程访问包括有很多方面的知道点,本文只介绍其中的三个知识点:访问远程对象返回对象,返回DataTable,返回DataSet对象.FluorineFx安装包里自带有相关的示例程序,要学习更多可直接参考这些示例程序.
     在实现访问前我们同样来做一些准备工作,建立好远程对象,如下:
 1 namespace Fluorine.ServiceLibrary
 2 {
 3     public class Book
 4     {
 5         public int Id { getset; }
 6         public string Name { getset; }
 7         public string Author { getset; }
 8         public double Price { getset; }
 9     }
10 }
 
     下面是提供Flex访问的远程对象:
ExpandedBlockStart.gif
 1 namespace Fluorine.ServiceLibrary
 2 {
 3     [RemotingService]
 4     public class FluorineService
 5     {
 6         /// <summary>
 7         /// 返回一个简单对象
 8         /// </summary>
 9         /// <returns></returns>
10         public Book GetBook()
11         {
12             return new Book
13             {
14                 Id = 1,
15                 Name = "《三国演义》",
16                 Author = "罗贯中",
17                 Price = 100
18             };
19         }
20 
21         /// <summary>
22         /// 返回DataTable对象
23         /// </summary>
24         /// <returns></returns>
25         [DataTableType("Fluorine.ServiceLibrary.Book")]
26         public DataTable GetDataTable()
27         {
28             DataTable dt = new DataTable("Book");
29             dt.Columns.Add("Id"typeof(int));
30             dt.Columns.Add("Name"typeof(string));
31             dt.Columns.Add("Author"typeof(string));
32             dt.Columns.Add("Price"typeof(double));
33 
34             DataRow dr = dt.NewRow();
35             dr["Id"= 1;
36             dr["Name"= "《三国演义》";
37             dr["Author"= "罗贯中";
38             dr["Price"= 52.30;
39             dt.Rows.Add(dr);
40 
41             dr = dt.NewRow();
42             dr["Id"= 2;
43             dr["Name"= "《西游记》";
44             dr["Author"= "吴承恩";
45             dr["Price"= 39.91;
46             dt.Rows.Add(dr);
47 
48             return dt;
49         }
50 
51         /// <summary>
52         /// 返回DataSet对象
53         /// </summary>
54         /// <returns></returns>
55         [DataSetType("Fluorine.ServiceLibrary.Book")]
56         public DataSet GetDataSet()
57         {
58             DataSet ds = new DataSet("DS");
59             DataTable dt = ds.Tables.Add("Books");
60             dt.Columns.Add("Id"typeof(int));
61             dt.Columns.Add("Name"typeof(string));
62             dt.Columns.Add("Author"typeof(string));
63             dt.Columns.Add("Price"typeof(double));
64 
65             DataRow dr = dt.NewRow();
66             dr["Id"= 1;
67             dr["Name"= "《三国演义》";
68             dr["Author"= "罗贯中";
69             dr["Price"= 52.30;
70             dt.Rows.Add(dr);
71 
72             dr = dt.NewRow();
73             dr["Id"= 2;
74             dr["Name"= "《西游记》";
75             dr["Author"= "吴承恩";
76             dr["Price"= 39.91;
77             dt.Rows.Add(dr);
78 
79             return ds;
80         }
81 
82     }
83 }
 
     上面代码片段中分别提供了返回一个对象,DataTable,DataSet对象的方法。这里只需要记住两个关键标识就行,它门是:DataTableType和DataSetType.  下面通过Flex的非可视化组件<mx:RemoteObject>来访问远程对象,OK,下面我们来看看具体怎么来调用。 
1  < mx:RemoteObject id = " ro "  destination = " fluorine "   >
2      source = " Fluorine.ServiceLibrary.FluorineService "
3      fault = " onFaultHandler(event) "
4       < mx:method name = " GetBook "  result = " onGetBookHandler(event) " />
5       < mx:method name = " GetDataTable "  result = " onGetDataTableHandler(event) " />
6       < mx:method name = " GetDataSet "  result = " onGetDataSetHandler(event) " />
7  </ mx:RemoteObject >
 
一、返回对象示例
1  [Binable]
2  private  var book:BookVO;
3      
4  private  function onGetBookHandler(evt:ResultEvent):void
5  {
6      book = evt.result  as  BookVO;
7  }
 
     通过点击按扭调用远程方法GetBook()完成方法的调用,直接可以将返回结果绑定到界面元素上。
1  < mx:Button label = " Book "  click = " ro.GetBook() " />
2  < mx:TextInput width = " 302 "  text = " {boo.Name+book.Author+book.Price} " />
 
二、返回DataTable对象
     返回DataTable和DataSet,将结果绑定到DataGrid上显示,先看看DataGrid的定义:
1  < mx:DataGrid  x ="10"  y ="10"  width ="543"  height ="147"  dataProvider ="{books}" >
2       < mx:columns >
3               < mx:DataGridColumn  headerText ="编号"  dataField ="Id" />
4               < mx:DataGridColumn  headerText ="书名"  dataField ="Name" />
5               < mx:DataGridColumn  headerText ="作者"  dataField ="Author" />
6               < mx:DataGridColumn  headerText ="价格"  dataField ="Price" />
7       </ mx:columns >
8  </ mx:DataGrid >
 
     DataGrid的数据源为定义的一个ArrayCollection对象,详细如下:
1  [Binable]
2  private var books:ArrayCollection;
 
1  private  function onGetDataTableHandler(evt:ResultEvent):void
2  {
3      books = evt.result  as  ArrayCollection;
4  }
 
 三、返回DataSet对象
1  private  function onGetDataSetHandler(evt:ResultEvent):void
2  {
3      books = evt.result  as  ArrayCollection;
4  }
 
     如上便完成了通过FluorineFx网关来实现远程访问,下面是完整的Flex端代码,实现很简单这里就不作详细讲解:
 1  <? xml version="1.0" encoding="utf-8" ?>
 2  < mx:Application  xmlns:mx ="http://www.adobe.com/2006/mxml"  layout ="absolute" >
 3       < mx:. >
 4           <! [CDATA[
 5              import mx.controls.Alert;
 6              import mx.rpc.events.ResultEvent;
 7              import mx.rpc.events.FaultEvent;
 8              import mx.collections.ArrayCollection;
 9              [Binable]
10              private var books:ArrayCollection;
11              [Binable]
12              private var book:BookVO;
13              
14              private function onGetBookHandler(evt:ResultEvent):void
15              {
16                  book=evt.result as BookVO;
17              }
18              
19              private function onGetDataTableHandler(evt:ResultEvent):void
20              {
21                  books=evt.result as ArrayCollection;
22              }
23              
24              private function onGetDataSetHandler(evt:ResultEvent):void
25              {
26                  books=evt.result as ArrayCollection;
27              }
28              
29              private function onFaultHandler(evt:FaultEvent):void
30              {
31                  Alert.show(evt.fault.faultDetail);
32              }
33          ]] >
34       </ mx:. >
35       < mx:Panel  x ="42"  y ="56"  width ="578"  height ="226"  layout ="absolute"  fontSize ="12" >
36       < mx:DataGrid  x ="10"  y ="10"  width ="543"  height ="147"  dataProvider ="{books}" >
37           < mx:columns >
38                   < mx:DataGridColumn  headerText ="编号"  dataField ="Id" />
39                   < mx:DataGridColumn  headerText ="书名"  dataField ="Name" />
40                   < mx:DataGridColumn  headerText ="作者"  dataField ="Author" />
41                   < mx:DataGridColumn  headerText ="价格"  dataField ="Price" />
42           </ mx:columns >
43       </ mx:DataGrid >
44       < mx:ControlBar >
45           < mx:Button  label ="DataTable"  click ="getDataTable()" />
46           < mx:Button  label ="DataSet"  click ="getDataSet()" />
47           < mx:Button  label ="Book"  click ="ro.GetBook()" />
48           < mx:TextInput  width ="302"  text ="{boo.Name+book.Author+book.Price}" />
49       </ mx:ControlBar >
50       </ mx:Panel >
51       < mx:RemoteObject  id ="ro"  destination ="fluorine"   >
52          source="Fluorine.ServiceLibrary.FluorineService"
53          fault="onFaultHandler(event)"
54           < mx:method  name ="GetBook"  result ="onGetBookHandler(event)" />
55           < mx:method  name ="GetDataTable"  result ="onGetDataTableHandler(event)" />
56           < mx:method  name ="GetDataSet"  result ="onGetDataSetHandler(event)" />
57       </ mx:RemoteObject >
58  </ mx:Application >
59 




本文转自 beniao 51CTO博客,原文链接:http://blog.51cto.com/beniao/137934,如需转载请自行联系原作者

目录
相关文章
|
19天前
|
开发框架 前端开发 JavaScript
基于SqlSugar的数据库访问处理的封装,支持.net FrameWork和.net core的项目调用
基于SqlSugar的数据库访问处理的封装,支持.net FrameWork和.net core的项目调用
|
19天前
|
开发框架 缓存 NoSQL
基于SqlSugar的数据库访问处理的封装,在.net6框架的Web API上开发应用
基于SqlSugar的数据库访问处理的封装,在.net6框架的Web API上开发应用
|
13天前
|
开发框架 JavaScript .NET
Vue与ASP.NET Core Web Api设置localhost与本地ip地址皆可访问
Vue与ASP.NET Core Web Api设置localhost与本地ip地址皆可访问
21 0
|
3月前
|
存储 PHP 数据库
使用Net2FTP轻松打造免费的Web文件管理器并公网远程访问
使用Net2FTP轻松打造免费的Web文件管理器并公网远程访问
100 0
|
3月前
|
Java Spring
解决问题:‘HttpHeaders()‘ 在 ‘com.google.common.net.HttpHeaders‘ 中具有 private 访问权限
解决问题:‘HttpHeaders()‘ 在 ‘com.google.common.net.HttpHeaders‘ 中具有 private 访问权限
64 0
|
10月前
|
对象存储 数据安全/隐私保护 开发者
.net core 阿里云接口之获取临时访问凭证
假设您是一个移动App开发者,希望使用阿里云OSS服务来保存App的终端用户数据,并且要保证每个App用户之间的数据隔离。此时,您可以使用STS授权用户直接访问OSS。 使用STS授权用户直接访问OSS的流程如下: ![image.png](https://ucc.alicdn.com/pic/developer-ecology/j2ygdazy447va_7d767aa1db4047778a7b5c568b5d7c11.png) ## 1、关于秘钥等信息的申请见如下链接 [使用STS临时访问凭证访问OSS](https://help.aliyun.com/zh/oss/developer
151 0
|
开发框架 前端开发 JavaScript
ASP .Net Core 中间件的使用(一):搭建静态文件服务器/访问指定文件
ASP .Net Core 中间件的使用(一):搭建静态文件服务器/访问指定文件
|
开发框架 .NET
解决NET Core发布iis项目覆盖原有的项目时"另一个程序正在使用此文件,进程无法访问"
解决NET Core发布iis项目覆盖原有的项目时"另一个程序正在使用此文件,进程无法访问"
|
开发框架 .NET Windows
iis正确安装了,但是还是无法访问,这是iis和.net安装顺序问题,记录一下
iis正确安装了,但是还是无法访问,这是iis和.net安装顺序问题,记录一下
|
SQL 网络安全
外网访问接口,报net::ERR_CONNECTION_REST错误。
外网访问接口,报net::ERR_CONNECTION_REST错误。
191 0