当前位置: 首页 > news >正文

Flex与.NET互操作(七):了解FluorineFx的环境配置(远程对象、网关、通道、目的地)...

注:本文内容原本计划在上一篇《Flex与.NET互操作(六):Flex和.NET协同开发利器FluorineFx 》中写出,考虑到写在一起文章内容太长故分为两篇。

Flex中的远程对象访问,也就是服务端提供一个远程服务对象(RemotingService Object),在Flex客户端通过相应的访问技术去调用远程对象的过程。

在本系列文章的前面几篇文章中所介绍的访问Webservice的方法,也就是一种远程对象方法,只不过他是基于WEB服务(WebServie)的远程访问,不是基于远程对象(Remoting Object)的的远程访问。要想直接实现基于对象的远程访问是比较麻烦的,然后FluorineFx则专门为我们提供了该功能,通过FluorineFx的核心库来开发远程对象(Remoting Object)服务,具体是怎么实现的呢?

FluorineFx要求为远程对象提供[RemotingService]标记来提供远程对象服务,看看下面的RemotingServiceAttribute的详细定义:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> 1 [AttributeUsage(AttributeTargets.Class,AllowMultiple = false )]
2 public sealed class RemotingServiceAttribute:Attribute
3 {
4 public RemotingServiceAttribute();
5 public RemotingServiceAttribute( string serviceName);
6 }


从上一篇文章中的示例代码可以看出,使用.NET(c#)定义了一个Sample的远程对象服务类,并为其指定了[RemotingService],详细如下:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> 1 [RemotingService( " Fluorinesampleservice " )]
2 public class Sample
3 {
4 public Sample()
5 {
6 }
7
8 public string Echo( string text)
9 {
10 return " Gatewayecho: " + text;
11 }
12 }

从上一篇文章中搭建FluorineFx与.NET的开发环境过程中就已经出现过Flex客户端调用FluorineFx的远程对象示例,下面我们在来看看这个示例:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> 1 < mx:RemoteObjectid = " service " destination = " fluorine "
2 source = " FlexDotNet.ServiceLibrary.Sample " >
3 < mx:methodname = " Echo " result = " onResult(event) " >
4 </ mx:method >
5 </ mx:RemoteObject >
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> 1 < mx:Script >
2 <! [CDATA[
3 importmx.rpc.events.ResultEvent;
4 internal functiononClick(): void
5 {
6 service.Echo(txtInput.text);
7 }
8
9 internal functiononResult(evt:ResultEvent): void
10 {
11 txtResult.text = evt.result.toString();
12 }
13 ]] >
14 </ mx:Script >

如上可实现远程对象访问,通过Flex的非可视化组件<mx:RemoteObject>进行远程对象连接。其中的source属性指定远程对象,格式为全限定名(命名空间+类名)。destination属性是非常重要的,这决定了Flex客户端是否可以正确的访问到远对象,相关配置如下:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> 1 < destinationid = " fluorine " >
2 < properties >
3 < source >*</ source >
4 </ properties >
5 </ destination >

在<mx:RemoteObject>组件内部使用<mx:Mothod>组件配置远程对象中的方法,详细见本文前面部分。要真实实现远程对象访问的核心是对象的适配器和连接通道:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> 1 <? xmlversion = " 1.0 " encoding = " UTF-8 " ?>
2 < serviceid = " remoting-service "
3 class = " flex.messaging.services.RemotingService "
4 messageTypes = " flex.messaging.messages.RemotingMessage " >
5 < adapters >
6 < adapter - definitionid = " dotnet " class = " FluorineFx.Remoting.RemotingAdapter " default = " true " />
7 </ adapters >
8
9 < default - channels >
10 < channel ref = " my-amf " />
11 </ default - channels >
12
13 < destinationid = " fluorine " >
14 < properties >
15 < source >*</ source >
16 </ properties >
17 </ destination >
18 </ service >

实际开发中我们可以进行自定义通信通道,默认情况下是使用FluorineFx为我们提供的默认连接通道:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> 1 < channels >
2 < channel-definition id ="my-amf" class ="mx.messaging.channels.AMFChannel" >
3 < endpoint uri ="http://{server.name}:{server.port}/{context.root}/Gateway.aspx" class ="flex.messaging.endpoints.AMFEndpoint" />
4 < properties >
5 <!-- <legacy-collection>true</legacy-collection> -->
6 </ properties >
7 </ channel-definition >
8 </ channels >

相关文章:

  • 摘自《卓有成效的程序员》
  • vbscript脚本1-读取xml格式的配置文件
  • vbscript脚本2-实现include的办法
  • C# xml反序列化
  • C# 获得本地IP地址
  • [ListView.View=List]的垂直滚动条
  • C# html编码和文本的转换
  • 服务质量:电信无法回避的短板
  • C# 使用.NET性能计数器示例 绘制出正弦函数图像
  • 软件开发者面试百问
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • 情人节的礼物——书写是为了更好地思考——回应未鹏
  • Fiddler 发请求时 设置 cookie
  • Xml CData的使用 获取原始的节点内容
  • Nebula3中的Message
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【知识碎片】第三方登录弹窗效果
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • angular2 简述
  • Apache Spark Streaming 使用实例
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • ES6--对象的扩展
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • jquery cookie
  • Kibana配置logstash,报表一体化
  • React 快速上手 - 07 前端路由 react-router
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • win10下安装mysql5.7
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 聊聊directory traversal attack
  • 聊聊flink的BlobWriter
  • 马上搞懂 GeoJSON
  • 学习笔记:对象,原型和继承(1)
  • 进程与线程(三)——进程/线程间通信
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​LeetCode解法汇总518. 零钱兑换 II
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • (1)svelte 教程:hello world
  • (day6) 319. 灯泡开关
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (九)c52学习之旅-定时器
  • (力扣)循环队列的实现与详解(C语言)
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .Net core 6.0 升8.0
  • .NET Project Open Day(2011.11.13)
  • .NET编程C#线程之旅:十种开启线程的方式以及各自使用场景和优缺点
  • [ 数据结构 - C++] AVL树原理及实现
  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式
  • [BZOJ] 2006: [NOI2010]超级钢琴
  • [C/C++]数据结构 循环队列
  • [C++]命名空间等——喵喵要吃C嘎嘎
  • [CTO札记]盛大文学公司名称对联