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

简介:
   关于远程访问在本系列文章中陆续的写了不少示例了,本文没有准备深入的去探讨,为了巩固FluorineFx网关的学习和使用。于此,本文将使用FluorineFx网关来提供数据服务等多项功能来介绍通过FluorineFx实现远程访问的相关知识点。
     FluorineFx提供的远程访问包括有很多方面的知道点,本文只介绍其中的三个知识点:访问远程对象返回对象,返回DataTable,返回DataSet对象.FluorineFx安装包里自带有相关的示例程序,要学习更多可直接参考这些示例程序.
     在实现访问前我们同样来做一些准备工作,建立好远程对象,如下:
 1 namespace Fluorine.ServiceLibrary
 2 {
 3     public class Book
 4     {
 5         public int Id { get; set; }
 6         public string Name { get; set; }
 7         public string Author { get; set; }
 8         public double Price { get; set; }
 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,如需转载请自行联系原作者

目录
相关文章
|
网络协议 物联网 5G
K3S 系列文章 -5G IoT 网关设备 POD 访问报错 DNS 'i/o timeout' 分析与解决
K3S 系列文章 -5G IoT 网关设备 POD 访问报错 DNS 'i/o timeout' 分析与解决
|
安全 网络协议 网络安全
【网络连接】ping不通的常见原因+解决方案,如何在只能访问网关时诊断,并修复IP不通的问题
【网络连接】ping不通的常见原因+解决方案,如何在只能访问网关时诊断,并修复IP不通的问题
36830 0
|
负载均衡 应用服务中间件 nginx
搭建域名访问环境二(负载均衡到网关)
这篇文章讲述了如何配置Nginx实现域名访问环境,通过负载均衡将请求从Nginx反向代理到服务网关,并提供了详细的配置步骤和测试验证方法。
搭建域名访问环境二(负载均衡到网关)
|
数据采集 传感器 监控
.NET 工控网关 轻量级组态软件
【10月更文挑战第10天】.NET 工控网关是一种基于 .NET 平台开发的设备,用于连接工业控制系统中的不同网络和设备,实现数据传输和协议转换。它能统一处理多种协议(如 Modbus、Profibus)的数据,便于后续系统处理。.NET 平台的优势包括开发效率高、跨平台能力强及安全性高,适用于工业物联网环境。此外,轻量级组态软件具备体积小、资源占用少的特点,可在资源受限的设备上运行,提供数据采集、监控、报警及数据分析等功能,简化工业自动化过程。
452 4
|
存储 安全 物联网
.NET 跨平台工业物联网网关解决方案
【9月更文挑战第28天】本文介绍了利用 .NET 构建跨平台工业物联网网关的解决方案。通过 .NET Core 和多种通信协议(如 MQTT 和 Modbus),实现工业设备的高效接入和数据采集。系统架构包括设备接入层、数据处理层、通信层、应用层和数据库层,确保数据的准确采集、实时处理和安全传输。此外,还详细阐述了设备身份认证、数据加密及安全审计等机制,确保系统的安全性。该方案适用于不同操作系统和工业环境,具备高度灵活性和扩展性。
635 2
|
前端开发 关系型数据库 MySQL
ThingsGateway:一款基于.NET8开源的跨平台高性能边缘采集网关
ThingsGateway:一款基于.NET8开源的跨平台高性能边缘采集网关
731 2
|
Kubernetes 安全 数据安全/隐私保护
利用服务网格实现全链路mTLS(二):通过出口网关访问外部mTLS服务
阿里云服务网格(Service Mesh,简称ASM)提供了一个全托管式的服务网格平台,兼容Istio开源服务网格,简化服务治理,包括流量管理、服务间通信安全及网格可观测性。ASM出口网关统一管理网格内的出口流量,实现全链路加密通信与精细访问控制。本文介绍如何配置ASM出口网关以管理出口流量并发起mTLS通信,涉及配置ServiceEntry、创建出口网关、设置虚拟服务及目标规则等步骤,最终实现安全可控的mTLS服务访问。
653 3
|
弹性计算 网络协议 网络安全
内网DNS解析&VPN网关联动实现云上访问云下资源
内网DNS解析&VPN网关联动实现云上访问云下资源
|
前端开发 应用服务中间件 nginx
用docker和nginx部署前端项目访问本地java网关gateway服务
本地开发 java 微服务项目,但是拿到的对应的web前端项目只有打包编译过后的 dist 目录里的静态资源(里面只有一个index.html和一些编译过后的 js、css文件),前端接口需要先访问到 java 的网关服务,然后网关里再做转发
1113 31
|
存储 PHP 数据库
使用Net2FTP轻松打造免费的Web文件管理器并公网远程访问
使用Net2FTP轻松打造免费的Web文件管理器并公网远程访问
517 0