知识大全 Custom Channel Sinks被我征服了

Posted 消息

篇首语:道德可以弥补能力的不足,能力却难以掩盖道德的缺陷。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Custom Channel Sinks被我征服了相关的知识,希望对你有一定的参考价值。

Custom Channel Sinks被我征服了  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  

  这两天由于公司业务的需要 需要将一项服务放到互联网上 采用的框架 remoting在使用上很简单 功能也很强大 是开发分布式应用程序的首选 但 remoting框架在传输数据时 并没有对数据进行加密处理和身份认真 所以这让我有了数据安全性的担心

  但 框架确实很强大 强大到可以让你自定义数据传送的方式 所以将安全策略加入到自定义的传送中是一个不错的选择

  但是这个自定义传送方式让我研究了 天时间 我将所有的接口定义都打印出来 将在网上找到的一篇关于Custom Channel Sinks的资料也打印了出来 一句一句分析 最后在今天下班的路上 我突然觉得我完全理解了Custom Channel Sink的工作流程 知道了如何将安全策略加入到Custom Channel Sink中

  在以后几天中 我会把原理写在我的blog上 希望路过的朋友多多指教

  原理

  当你调用远程对象时 你并没有直接引用它 你引用的是远程对象在本地的代理 代理对象在处理上很像远程对象 它能够将基于栈的方法调用转换成消息 将其发送给远程对象 为了让消息发送给远程对象 代理对象要使用到Sink Chain(可以看成是数据处理链) 首先 代理对象会调用第一个链节 将数据传给它 第一个链节获取数据后 对数据做进行处理 然后再将数据传递给下一个链接 以此类推  在处理链中 有一个链节是formatter sink(格式处理链节) 其功能是将消息数据转换为stream(流) 之所以要在在格式链节处理数据之后 再将数据传递给下一个链节进行处理 是因为在这个节点 消息已经不再和数据类型相关 此刻的数据表现形势只是二进制字节流(我们可以对它做任何处理 对吧) 最后一个链节是Transports Sink 它的功能是将数据发送到服务器并等待回应 当它收到回应后 它会将数据传递前一个链节 直到最开始的那个链节将数据传递给代理对象

  当数据发送到服务器端后 服务器端也有一个Sink Chain 它的节点与客户端上的节点一致 只是顺序相反 在服务器上 处理数据的第一个节点是Transport Sink 数据沿着Sink Chain传递到真正的远程数据处理对象

  客户端 代理对象 >formatter sink >transport sink服务器端 transport sink > formatter sink > 远程目标对象

  在这个处理链中 我们可以加入自定义的链节 加入自定义链节的目的很多 而我所需要的是保证数据在网络上传输的安全性 在上面我们已经意识到 当消息经过formatter sink处理后 就以字节流的形式体现 而对字节的加密处理 对程序员来说是再简单不过的事情 所以 我要做的 就是在客户端 将加密处理链节加到formatter sink之后 在服务器端 将解密处理链节加到formatter sink之前

  上面这些内容看起来很简单 但要把它作出来 还需要很多工作 你确实可以通 框架轻松实现分布式应用程序的功能 但是如果你要自定义其中的部分功能 事情就不象想象的那么容易了(至少不是几个继承能够解决问题的)

  开始艰难之旅

  要实现自定义链节 首先要实现以下几个接口 IMessageSink IClientChannelSink IServerChannelSink IClientSinkProvider IServerSinkProvider虽然我们处理的只是加密问题 但是 框架中 找不到一个链节处理的基类 所以下面的路会比较艰难

  IMessageSink     属性         NextSink 获取处理链中的下一个链节    方法         AsyncProcessMessage 异步处理获取的消息        SyncProcessMessage 同步处理获取得消息

  IClientChannelSink     属性         NextChannelSink 获取客户端处理链节中的下一个链节    方法         AsyncProcessRequest 在当前的处理链节中 请求异步数据处理        AsyncProcessResponse 在当前的处理链节中 请求异步回应        GetRequestStrean 返回字节流到即将被序列化的消息上        ProcessMessage 从当前的处理链节中 请求消息处理

  IServerChannelSink     属性         NextChannelSink 获取服务器端处理链节中的下一个链节    方法         AsyncProcessResponse 异步处理回应消息        GetResponseStream 返回流到即将被序列化的消息上        ProcessMessage 从当前链节请求消息处理       

  在上面几个接口中 最重要的是IMessageSink 这个接口的同步处理与异步处理都要实现 以下是伪代码 public __gc class BaseSink : IMessageSinkPrivate:    IMessageSink* nextMessageSink;public://执行异步处理IMessageCtrl* IMessageSink::AsyncProcessMessage(IMesage* msg IMessageSink* replaySink)    //处理发送的消息 对消息的加密处理在这里进行    //创建返回的MessageSink  replysink 由replaysink 来处理返回的消息 该线程不必等待消息的回应    return this >nextMessageSink AsyncProcessMessage(msg replysink );//执行同步处理IMessage* IMessageSink::SyncProcessMessage(IMessage* msg)    //处理发送的消息 对消息的加密处理在这里进行    IMessage* resMsg = this >nextMessageSink SyncProcessMessage(msg);//获取返回的消息 线程在这里等待回应    //处理返回的消息 并返回处理后的消息 对消息的解密处理在这里进行__property IMessageSink* IMessageSink::get_NextSink()    return this >nextMessageSink;

  在这里 万里长征终于走出了坚实的第一步了 攻克了IMessageSink 相信后面的那几个接口会很好搞定

  作为 Net框架中强大的一部分 Channel Sink不可能就了了几字可以说完 第二步如何走 请看Custom Channel Sink征服之旅二

cha138/Article/program/net/201311/11395

相关参考

科学名家故事 征服狂犬病

   巴斯德由于工作的关系,接触许多被疯狗咬伤引起狂犬病的患者,他亲眼目睹过一些不幸的病人在无情的精神折磨中死去。巴斯德决心征服狂犬病这种“绝症”。  

知识大全 苹果手机被我摔了下 边上屏幕碎了能修吗

苹果手机被我摔了下边上屏幕碎了能修吗,苹果手机的屏被我摔碎了长宁区有修苹果手机的吗?修是可以修的,建议还是去官方维修点件侧一下到处地都有什么问题。看你说的这个情况,摔的有点严重,要看手机屏幕的显示是否

知识大全 用细节征服HR

用细节征服HR  以下文字资料是由(本站网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!因为跷二郎腿失去工作机会,听起来像天书

知识大全 电话图标和联系人图标被我手贱删了

三星手机电话图标和联系人图标被我手贱删了!在设置里的程序管理器里,选全部程序,找到联系人或者电话,当你图标还在时,右上是关闭。当没有启动时,右上有一个启动,你点启动,然后就会恢复了。你再按住图标不放,

科学调养 征服癌症

1999年2月1日,我接诊了一位47岁的晚期癌症患者。其左肾长有6×8厘米的肿瘤,经肾穿切片诊断为透明细胞癌,并被医院判了“死刑”。在患者拒绝西医手术、放化疗和口服任何西药的情况下,我通过中医给他进行

知识大全 女朋友以前被我伤害过.现在心里有阴影怎么办

女朋友以前被我伤害过.现在心里有阴影怎么办?我同意dbywhb的说法,其实也许你已不能真心对她好了,也许在她阴影下面你终究会被折磨得很辛苦,最终还是选择继续伤害,我和我男友相恋不说七年吧,就说五年,分

知识大全 刷机是否能刷坏手机,手机店说手机是被我刷

刷机是否能刷坏手机,手机店说手机是被我刷非常抱歉,三星手机官网没有提供刷机软件。由于刷机存在风险,如因自行刷机后导致的手机问题,还有可能会影响包修,因此我们不建议您自行刷机。若手机因系统故障无法正常使

以中庸之道征服癌症

中医认为,癌为气血凝结之物。血的流注受到了阻碍,演变为不溃烂的臃肿,如毒蛇盘踞,害人性命,这就是癌。它形如海岸边重叠高峭的山,非常险恶。而五脏中“肝,性刚烈,主藏血”,只有通过中庸之道,“柔肝”、“养

不怕它,关心它,征服它

1999年,我因患胃喷门癌做了手术切除,并进行了放疗和化疗,还因胃穿孔切除了五分之四的胃。体重由138斤降到90斤,身体极度虚弱,瘦得皮包骨头,连熟人见了我也难以辨认了。人人都认为我活在世上的日子不长

顺势疗法——人类征服疾病新武器

长寿是人类永恒的追求。随着基因、纳米、量子医学的发展,顺势疗法这一充满神奇、奥秘的医疗体系在人们逐步接受的同时更有了长足的发展,已被公认为是最有效、最安全的医疗体系之一。顺势疗法源于西方,是有别于中、