信道、接收器、接收链和信道接受提供程序

news/2025/3/14 8:51:40

Channel, Sink, Sink Chain and Channel Sink Provider

 

为了扩展.Net Remoting,定制接收器(Sink)和信道接受提供程序(Channel Sink Provider),改变.Net Remoting的缺省行为,需要先了解.Net Remoting的相关概念及其运行机制。

 

下面先了解一些基本概念:

 

信道(Channel-是跨远程处理边界(无论是在应用程序域、进程还是计算机之间)在应用程序之间传输消息的对象。信道可以在终结点上侦听入站消息,向另一个终结点发送出站消息,或者两者都可以。

信道必须实现 IChannel 接口,该接口提供诸如 ChannelName ChannelPriority 这样的属性。专用于在特定端口上侦听特定协议的信道实现 IChannelReceiver,而专用于发送信息的信道实现 IChannelSender(注:IChannelReceiverIChannelSender接口都继承IChannel 接口)。TcpChannel HttpChannel 对象都实现这两种接口,因此它们可用于发送或接收信息。

.Net Remoting Framework提供了TcpChannel HttpChannel两个信道的实现。

 

在发送消息之前或接收消息之后,信道(Channel)沿着信道接收对象链(a chain of channel sink objects)发送每个消息。该接收链(sink chain)包含基本信道功能所需的接收器(Sink(如格式化程序接收器FormatterSink、传输接收器TransportSink或堆栈生成器接收器StackBuilderSink),但是您可以自定义信道接收链以便用消息或流执行特殊任务。

 

信道接收链(Sink Chain处理任何发送到应用程序域或从应用程序域发送的消息。此时,您只有消息,但是您可以任意操作该消息,而后面的处理将使用您在处理之后返回给系统的消息。这是实现日志记录服务、任何种类的筛选器或者客户端或服务器上的加密或其他安全措施的理所当然的位置。以下插图显示基本信道接收链的结构。



每个信道接收器(Channel Sink都处理流,然后将流传递到下一个信道接收器,这意味着您的接收器之前或之后的对象应当知道该如何处理传递给它们的流。(Sink/Channel Sink是同一个描述。)

StackBuilderSink 对象是服务器上远程对象前的最后一个消息接收器。

 

每个信道接收器(Channel Sink)或者实现 IClientChannelSink,或者实现 IServerChannelSink。客户端上的第一个信道接收器还必须实现 IMessageSink。它通常实现 IClientFormatterSink(它从 IMessageSinkIChannelSinkBase IClientChannelSink 继承),并被称作格式化程序接收器(Formatter Sink),因为它将传入的消息转换为流(IMessage 对象)。

 

信道接收提供程序(Channel Sink Provider-(实现 IClientChannelSinkProviderIClientFormatterSinkProvider IServerChannelSinkProvider 接口的对象)负责创建远程处理消息所流过的信道接收器(Channel Sink)。当远程类型被激活后,将从信道(Channel)中检索信道接收提供程序(Channel Sink Provider);然后在该接收提供程序上调用 CreateSink 方法以检索链上的接收器中的第一个Sink

 

信道接收器(Channel Sink)还负责在客户端和服务器之间传输消息。信道接收器也链接在一起而形成一个链。当在接收提供程序上调用 CreateSink 方法时,该方法应该执行以下操作:

·         创建它自己的信道接收器。

·         在链中的下一个接收提供程序上调用 CreateSink

·         确保下一个接收器和当前的接收器链接在一起。

·         将其接收器返回到调用方。

信道接收器负责将在它们上面进行的所有调用转发到链中的下一个接收器,并且应当提供用于存储对下一个接收器的引用的机制。

 

自定义信道接收器(Custom Channel Sinks

自定义信道接收器被插入到格式化程序接收器(FormatterSink)和最后一个传输接收器(TransportSink)之间的对象链中。

 

传输接收器(TransportSink

传输接收器是客户端上的链中最后一个接收器和服务器端上的链中第一个接收器。除了传输序列化的消息,传输接收器还负责将标头(Header)发送到服务器并在调用从服务器返回时检索标头和流。这些接收器内置在信道中,并且无法扩展。

 

简要总结.Net Remoting Infrastructure机制:

1,代理对象(Proxy)负责转发对Remote Objects的调用。

2,消息对象(Message Objects)用来调用Remote Methods的数据。

3,信道接收器(Sink/Channel Sink)用来远程方法调用(Remote method calls)处理消息。

4,信道接收提供程序(Channel Sink Provider)-一般用来将接收器(Sink)插入到信道接收链(Sink Chain)中。

5,格式化程序接收器FormatterSink-用来序列化/反序列化消息格式,进行传递。

6,传输接收器TransportSink-用来在进程或AppDomain之间传递序列化的消息。

 

Reference:

1, MSDN, .NET Framework 开发员指南, 接收器和接收链

 

 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1793963


文章来源:https://blog.csdn.net/zhaowei001/article/details/1951378
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://dhexx.cn/news/show-3792349.html

相关文章

请听一个故事------百度员工离职总结:如何做个好员工

(本文转载于互联网:http://mp.weixin.qq.com/s?__bizMzA3MDMyODYyOA&mid200222421&idx1&snee08905ff5a69fb6600e30a9694795e6&3rdMzA3MDU4NTYzMw&scene6#rd) 2014年7月4日,我从百度离职了。 这是第一次&…

教你快速安装 TortoiseSVN 作为 SVN 客户端,跟我一步一步来安装吧!!!

使用 TortoiseSVN 作为 SVN 客户端 一、下载 下载地址 二、安装 1. 双击进行安装,点击下一步。 2. 点击安装。 3. 直接点击完成!!! 4. 经过上面的操作之后,点击开始菜单,在左侧会看到如下的图标&#x…

用AS3调用摄像头(附源代码下载)

用as3调用摄像头,代码如下:package { import flash.display.Sprite; import flash.text.*; import flash.media.Camera; import flash.events.StatusEvent; import flash.events.ActivityEvent; import flash.media.Video; public class CameraEx extend…

关于SVN---集中式版本管理系统,你想知道的都在这里啦!!!

SVN 简单介绍如下: SVN 全称 Apache Subversion,是一个开放源代码的集中式版本管理系统。 在 2000 年由 CollabNet 开发,现已发展成为 Apache 软件基金会的一个开源项目。 环境安装 鉴于文章篇幅的原因,有关环境安装的具体步骤…

使用 PreparedStatement 进行模糊查询

使用 PreparedStatement 进行模糊查询的方法和注意事项。 今天发现有人问这样的问题:在预编译语句中,执行下面的语句出错,select * from tblcategory,tblproduce where tblcategory.category tblproduce.category and name like %?% 这样的…

手把手教你安装和配置 Git 环境,走过路过千万不要错过啊!!!

安装和配置 Git 环境 一、下载 下载地址 二、安装 1. 双击进行安装,点击下一步。 2. 直接点击下一步。 3. 直接点击下一步!!! 4. Git 表示安装成功后文件夹的名字,点击下一步!!!…

今天,我又想你了!

今天,我又想你了!夜很安静,无法宁静的,可能就是我想你的心了,我也不知道,我为什么会这样想你.........千言万语,只说一句:认识你,真好!今天,我又想你了!感觉,想你是一种幸福,也是一种痛苦,算是甜蜜的痛苦吧!世上有70亿人,而我偏偏认识你,这是一种缘分吗?网上有好几亿的人,而我…

两幅图让你搞清楚 Git 的使用交互流程,走过路过千万不要错过啊!!!

Git 的使用和交互流程 本地代码版本管理 首先需要知道三个区,分别是 工作区、暂存区、本地仓库,这三个区,先不说多人协作的事情,先说在本地进行代码版本的管理!!! 和远程代码仓库进行交互 和…

在无线J2ME设备上实现http传输

随着越来越多手提电话和个人数字助理开始融入到信息高速公路之上,从移动设备上访问Web站点变得越来越重要。Java开创了消费设备中小型的储存容量的先河,它是用于开发手机、传呼机及其他微型设备应用程序的理想语言。  在本文中,我们将学习如…

Math.abs为Integer.Min_VALUE返回错误的值

Math.abs为Integer.Min_VALUE返回错误的值这段代码: System.out.println(Math.abs(Integer.MIN_VALUE));回报-2147483648这难道不应该返回绝对值2147483648?-----------------------------------------------------------------------------------------…