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访问的远程对象:

 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,如需转载请自行联系原作者

目录
相关文章
|
6月前
|
网络协议 物联网 5G
K3S 系列文章 -5G IoT 网关设备 POD 访问报错 DNS 'i/o timeout' 分析与解决
K3S 系列文章 -5G IoT 网关设备 POD 访问报错 DNS 'i/o timeout' 分析与解决
|
16天前
|
SQL XML 关系型数据库
入门指南:利用NHibernate简化.NET应用程序的数据访问
【10月更文挑战第13天】NHibernate是一个面向.NET的开源对象关系映射(ORM)工具,它提供了从数据库表到应用程序中的对象之间的映射。通过使用NHibernate,开发者可以专注于业务逻辑和领域模型的设计,而无需直接编写复杂的SQL语句来处理数据持久化问题。NHibernate支持多种数据库,并且具有高度的灵活性和可扩展性。
36 2
|
17天前
|
弹性计算 网络协议 网络安全
内网DNS解析&VPN网关联动实现云上访问云下资源
内网DNS解析&VPN网关联动实现云上访问云下资源
|
6月前
|
安全 网络协议 网络安全
【网络连接】ping不通的常见原因+解决方案,如何在只能访问网关时诊断,并修复IP不通的问题
【网络连接】ping不通的常见原因+解决方案,如何在只能访问网关时诊断,并修复IP不通的问题
8289 0
|
3月前
|
负载均衡 应用服务中间件 nginx
搭建域名访问环境二(负载均衡到网关)
这篇文章讲述了如何配置Nginx实现域名访问环境,通过负载均衡将请求从Nginx反向代理到服务网关,并提供了详细的配置步骤和测试验证方法。
搭建域名访问环境二(负载均衡到网关)
|
2月前
|
SQL 存储 关系型数据库
C#一分钟浅谈:使用 ADO.NET 进行数据库访问
【9月更文挑战第3天】在.NET开发中,与数据库交互至关重要。ADO.NET是Microsoft提供的用于访问关系型数据库的类库,包含连接数据库、执行SQL命令等功能。本文从基础入手,介绍如何使用ADO.NET进行数据库访问,并提供示例代码,同时讨论常见问题及其解决方案,如连接字符串错误、SQL注入风险和资源泄露等,帮助开发者更好地利用ADO.NET提升应用的安全性和稳定性。
203 6
|
3月前
|
算法 Java 测试技术
java 访问ingress https报错javax.net.ssl.SSLHandshakeException: Received fatal alert: protocol_version
java 访问ingress https报错javax.net.ssl.SSLHandshakeException: Received fatal alert: protocol_version
|
3月前
|
API
【Azure Key Vault】.NET 代码如何访问中国区的Key Vault中的机密信息(Get/Set Secret)
【Azure Key Vault】.NET 代码如何访问中国区的Key Vault中的机密信息(Get/Set Secret)
|
3月前
|
Kubernetes 安全 数据安全/隐私保护
利用服务网格实现全链路mTLS(二):通过出口网关访问外部mTLS服务
阿里云服务网格(Service Mesh,简称ASM)提供了一个全托管式的服务网格平台,兼容Istio开源服务网格,简化服务治理,包括流量管理、服务间通信安全及网格可观测性。ASM出口网关统一管理网格内的出口流量,实现全链路加密通信与精细访问控制。本文介绍如何配置ASM出口网关以管理出口流量并发起mTLS通信,涉及配置ServiceEntry、创建出口网关、设置虚拟服务及目标规则等步骤,最终实现安全可控的mTLS服务访问。
144 3
|
4月前
|
开发框架 前端开发 JavaScript
基于SqlSugar的数据库访问处理的封装,支持.net FrameWork和.net core的项目调用
基于SqlSugar的数据库访问处理的封装,支持.net FrameWork和.net core的项目调用