Sloth 实战(二)之远程对象
Sloth 实战2 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
---Sloth与SlothAgent
Sloth中使用远程服务对象
有时我们需要利用Sloth向远程代理服务器自定义传送对象,方便操作。那么在Sloth中解耦的情况下怎么实现呢?其实很简单,就像操作普通对象一样。
1.为了让对象穿越应用域边界,在Sloth和Agent中互相传递的对象,必须派生于MarshalByRefObject这个类;
2.如果想长时间使用传递的对象,必须将对象重载InitializeLifetimeService这个方法,设置生命周期为无限制;例如:
{
return null;
}
3.客户端使用对象时,首先需要通过Sloth向SlothAgent申请远程对象,此时远程对象需要在服务端创建后,传递到客户端;
4.和其他一样,需要在Sloth和Agent间传递的对象,需要在客户端和服务端同时存在;
5.由于dotNet FrameWork1.1起默认远程对象不允许被反序列化,所以需要将SlothAgent的安全模式设置为完全信任模式;例如:
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
利用远程事件,绕开Sloth,直接操作远程服务对象
或许您会很不习惯在开发中反复使用Sloth提供的远程调用方法和Agent通讯。那么您可以通过远程事件,绕开Sloth直接操作远程对象。
远程服务事件只需要在开发时,根据自己的需求在服务组件上编制。Sloth没有特定的规则约束,只要遵循.Net开发框架下的定义就可以了。客户端调用远程方法,类似与客户端向服务组件发传真,就能激活远程对象的事件处理。这样,能轻松绕开Sloth提供的方法。
远程通用对象:
{
public delegate void CustomEventHandler(string messages);
public event CustomEventHandler LocalBroadCastEvent;
private int index;
public int Index
{
get { return index; }
set { index = value; }
}
public EventWrapper()
{
}
public void AnswerEvent(string message)
{
this.index += 1;
LocalBroadCastEvent(message);
}
public override object InitializeLifetimeService()
{
return null;
}
}
远程通用对象继承于MarshalByRefObject,这样可以在不同应用域中相互传递。如果不需要客户端对远程对象的生命周期进行管理,可以将生命周期设置为无限制。
服务对象组件:
{
public event Demo.EventBase.EventWrapper.CustomEventHandler CustomEvent;
private EventWrapper targetEvents = null;
/**//// <summary>
/// 获取远程对象
/// </summary>
/// <returns></returns>
public Hashtable GetRemoteObj()
{
Hashtable result = new Hashtable();
try
{
targetEvents = new EventWrapper();
EventWrapper targetevents = new EventWrapper();
//targetevents.LocalBroadCastEvent += new EventWrapper.CustomEventHandler(targetEvents.AddText); //创建远程对象同时,定制服务组件的接收事件;
EventWrapper.CustomEventHandler CustomEventType = new EventWrapper.CustomEventHandler(targetEvents.AnswerEvent);
result.Add("EventWrapper", targetevents);
result.Add("CustomEventHandler", CustomEventType);
}
catch(Exception ex)
{
throw (ex);
}
return result;
}
/**//// <summary>
/// 服务端相应的事件
/// </summary>
/// <param name="message"></param>
private void AddText(string message)
{
MessageBox.Show("number" + targetEvents.Index.ToString() + " Client Fax: " + message);
}
/**//// <summary>
/// 定制事件
/// </summary>
public EventWrapper SimulateEvent()
{
try
{
if (targetEvents != null)
{
targetEvents.LocalBroadCastEvent += new EventWrapper.CustomEventHandler(this.AddText);
}
}
catch (Exception ex)
{
throw (ex);
}
return targetEvents;
}
}
服务对象提供创建远程对象的实例,订阅远程事件等方法提供给客户端使用。客户端首先会从服务对象获取远程对象实例;
首先,在远程对象中定义代理事件的格式:
public delegate void CustomEventHandler(string messages);
并且使用代理的对外接口:
public event CustomEventHandler LocalBroadCastEvent;
然后由服务对象绑定远程对象需要使用的事件:
if (targetEvents != null)
{
targetEvents.LocalBroadCastEvent += new EventWrapper.CustomEventHandler(this.AddText);
}
客户端需要显示的获取远程对象:
//再次获取远程服务对象;(可以在创建远程对象时,在服务上创建事件代理)
eventWrapper = ic.RemoteService<EventWrapper>("TailorService", "SimulateEvent", null);
获取远程对象后,客户端就可以直接使用远程对象的事件了;
SlothAgent的状态选择
SlothAgent提供了2种服务器的运行模式:有状态和无状态。那么,这两种模式有什么不同呢?
1. 有状态模式: Agent会在运行期间为每个连接的客户端保存所使用的服务对象的实例,每个实例间互不干扰;
2. 无状态模式:Agent在运行期间不会为每个用户保存所使用的服务对象实例的状态,只是将所有的对象实例保存,方便快速使用;
Sloth的预计增加的功能
Business Rule Engine 业务规则引擎
规则语言分为两类:
“面向程序技术”的规则语言,使用者是开发人员。在开发期由开发人员创建最初的控制规则集,能按需求满足系统的运行;
“面向业务”的规则语言,使用者是最终用户。引擎会根据由开发人员定制的规则集,产生用于业务的规则集,由用户修改或拓展规则集,减少由于业务变化产生的维护麻烦等问题;
示例代码下载:http://files.cnblogs.com/duochunyu/EventDemoSource_061121.rar
转载于:https://www.cnblogs.com/duochunyu/archive/2006/11/22/568829.html
Sloth 实战(二)之远程对象相关推荐
- Taro多端开发实现原理与项目实战(二)
Taro多端开发实现原理与项目实战(二) 多端电商平台项目概述及开发准备 学习了前面的基础知识和进阶后是否跃跃欲试?我们准备了一个电商平台的项目来和大家一起实践使用 Taro 开发电商平台. 项目概述 ...
- 【Qt】数据库实战(二)
00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 连接到数据库 04. 操作结果集 06. 附录 01. 概述 SQL即结构化查询语言,是关系数据库的标准语言.前面已经在Q ...
- 小米手环iOS开发实战(二):开发Demo让你的手环振动起来
小米手环iOS开发实战(二):开发Demo让你的手环振动起来 上一节讲了CoreBluetooth的使用,理论知识很枯燥,那么现在先利用上一节讲的内容,做一个简易手环应用,实现连接/断开手环,查看手环 ...
- python用户界面游戏_用Python和Pygame写游戏-从入门到精通(实战二:恶搞俄罗斯方块2)...
我们接着来做这个整死人不偿命的俄罗斯方块. 代码组织和名词约定 上一次我们稍微整理了一下游戏运行的框架,这里需要整理一下python代码的框架,一个典型的pygame脚本结构如下: 其中,lib为py ...
- java爬取网页数据_Python网络爬虫实战(二)数据解析
Python网络爬虫实战 (二)数据解析 本系列从零开始阐述如何编写Python网络爬虫,以及网络爬虫中容易遇到的问题,比如具有反爬,加密的网站,还有爬虫拿不到数据,以及登录验证等问题,会伴随大量网站 ...
- mysql5.7开机wmi_跟我从头学WMI(二)--访问WMI对象
WMI对象 一. 使用脚本连接到WMI 1. 使用SWBEM脚本API SWBEM脚本是可以用来访问和控制WMI内部对象的一系列可用在脚本中的对象. Scripting object model ...
- DDD实战与进阶 - 值对象
目录 DDD实战与进阶 - 值对象 概述 何为值对象 怎么运用值对象 来看一个例子 值对象的持久化 总结 DDD实战与进阶 - 值对象 系统小说网 wap.kuwx.net 概述 作为领域驱动设计战术 ...
- Bootstrap基础二十七 多媒体对象(Media Object)
Bootstrap<基础二十七> 多媒体对象(Media Object) 原文:Bootstrap<基础二十七> 多媒体对象(Media Object) Bootstrap 中 ...
- 【干货】原生js做的一维数组对象,二维数组对象的模糊查询(前端网备份)...
最重要的是二维数组 小程序通讯录(student) 后台的数据格式 wxml <input bindconfirm="search" bindinput="bind ...
- 实战:在远程网络配置DNS转发
2.1 实战:在远程网络配置DNS转发 实战目标: ü 在公司的远程网络中添加DNS服务器并配置为DNS转发器,以节省远程网络到总公司网络之间的域名解析流量. 企业场景: 微软河北技术支持中心,有两个 ...
最新文章
- JavaScript学习笔记 - 入门篇(1)- 准备
- 3.NIO_Buffer缓冲区
- phpshe b2c商城系统配置nginx支持pathinfo和rewrite的写法
- tornado学习笔记day06-应用安全
- mysql8.0导入备份_mysql8.0.20配合binlog2sql的配置和简单备份恢复的步骤详解
- 【转载】DNN6开源CMS
- 设计sample语言的语法_Verilog语法之〇:Verilog HDL简介
- JavaScript jQuery bootstrap css ajax
- APT***实例研究与企业现有防御体系缺陷分析
- greenDAO系列7--关系
- Java——SOF 与 OOM
- PM、GAN、InfoGAN、对抗自编码模型对比
- 定制MACD背离副图
- happen-before原则与JMM内存模型
- 搜索引擎模块设计与实现——相关度搜索算法模块
- python PIL库中的getpixel函数
- Java必背基础词汇
- 读《Google软件测试之道》笔记---SWE,SET,TE职责
- A卡 HD5770(HD6770) Readon HD 5xxx 6xxx系列显卡黑苹果MOJAVE CATALINA QE/CI驱动教程
- winrar5.9-64位最新版
热门文章
- 物联网传感技术——压电式传感器
- 阳明心学在敏捷开发中的应用
- GW INSTEK GPD 3303系列稳压源控制软件(自行使用c#编写)更新
- CDN选择合适的回源策略很重要
- 对于上海交通大学网络安全专业21考研823的一些总结以及22考研专业课如何准备的想法
- 网络攻防之wireshark抓取登录信息
- 清理android根目录垃圾,安卓清理君——清除手机垃圾
- phoenix查不到数据_Phoenix查询测试经验总结
- 小心!QQ和MSN聊天记录也会随时被监控
- C语言根号下ln怎么表示,用C语言怎么编y=sin(根号下ax)+ln(a+X)