.net Remoting(2)——信道,MarshalByRefObject类

简介: remoting提供一种允许对象通过应用程序域去与另一对象进行交互的框架。如果要通过应用程序域进行通信,在remoting中要通过信道(channel)来实现。   信道 信道是跨越远程处理边界(应用程序域,进程,计算间之间)在应用程序之间传递消息的对象。

remoting提供一种允许对象通过应用程序域去与另一对象进行交互的框架。如果要通过应用程序域进行通信,在remoting中要通过信道(channel)来实现。

 

信道

信道是跨越远程处理边界(应用程序域,进程,计算间之间)在应用程序之间传递消息的对象。信道可以在终结点监听入站消息,向基他终结点发送出站消息,或进行这两种操作。

信道须实现IChannel接口,这个接口提供了信息性属性,如:ChannelNameChannelPriorityIChannelReceiver接口,用于监听特定端口上的特定协议的信道实现。IChannelSender接口用于发送消息的信道实现。TcpChannelHttpChannel对象都实现了这两种接口,可以发送或接收消息。

 

.net 提供了几种信道实现:

1IpcChannel

通过使用命名管道为同一台计算机上的多进程应用程序提供高速进程间通信。它执行的功能:

·使用命名管道进行发送方和接收方的通信

·支持以二进制格式和行业标准soap序列化格式编码

·生成并使用对象引用的ChannelDataStore

·支持模拟和委托

·支持在命名管道上利用访问控制列表(ACL)来提供高级访问控制

 

在应用程序与本机其它进程中的另一应用程序进行通信时,优先使用IpcChannel

2TcpChannel

二进制格式化程序装所有消息序列化为二进制流,并使用Tcp协议将流传输至URI,它执行以下功能:

·使用tcp socket进行发送方与接收方的通信

·支持以二进制格式和行业标准soap序列化格式编码负载

·生成并使用对象引用的ChannelDataStore

·支持模拟和委托

·支持SSPI加密

HttpChannel连接到用TcpChannel进行监听的服务器应用程序域时,客户端将收到:基础连接已经关闭:接收时发生错误,这样的异常。存在信道不匹配的问题。

3HttpChannel

使用Soap协议在远程对象之间传输消息。所有的消息都通过SoapFormatter传递,这个格式化器会将消息转换为xml,然后进行序列化,同时向数据流中添加soap头。如果指定二进制格式化器,则会创建二进制数据流。最后通过http协议将数据流传输到URIHttpChannel符合soap1.1标准,它执行以下功能:

·通过http协议在发送方和接收方之间的通信

·支持以soap和二进制格式编码负载

·将接收方设置为通过.nettcp套接字接收http请求并发送http响应

·支持模拟和委托

·支持SSPI加密

HttpChannel一次只向给定服务器打开指定数目的连接。默认为2,可通过clientConnectionLimit属性进行设置。

 

使用.net remoting处理的应用程序来跨应用程序域边界进行通信,需要一个可远程处理的类的实现,一个监听或宿主应用程序域,一个客户端或调用应用程序域,同时段将每个应用程序域中的远程处理系统都配置为对可远程处理的类型使用远程激活

 

远程对象

为了让其它应用程序域中的对象能访问类的实例,那么这个类要从MarshalByRefObject派生。

public class RemotableType : MarshalByRefObject

{}

 

这个类支持远程处理的应用程序中跨应用程序域边界访问对象。

同一应用程序域中的对象直接通信。不同应用程序域中的对象的通信方式有两种:

·跨应用程序域边界传输对象副本

·通过代理交换消息

 

MarshalByRefObject是通过使用代理交换消息来跨应用程序域边界进行通信的对象的基类。

 

博客园大道至简

http://www.cnblogs.com/jams742003/

转载请注明:博客园

目录
相关文章
|
IDE API 开发工具
拦截|篡改|伪造.NET类库中不限于public的类和方法
本文除了回顾拦截.NET类库中的方法,实现方法参数的篡改、方法返回结果的伪造,再着重介绍.NET类库中非public类及方法如何拦截。
拦截|篡改|伪造.NET类库中不限于public的类和方法
|
1月前
|
开发框架 .NET C#
C#|.net core 基础 - 删除字符串最后一个字符的七大类N种实现方式
【10月更文挑战第9天】在 C#/.NET Core 中,有多种方法可以删除字符串的最后一个字符,包括使用 `Substring` 方法、`Remove` 方法、`ToCharArray` 与 `Array.Copy`、`StringBuilder`、正则表达式、循环遍历字符数组以及使用 LINQ 的 `SkipLast` 方法。
|
14天前
.NET 4.0下实现.NET4.5的Task类相似功能组件
【10月更文挑战第29天】在.NET 4.0 环境下,可以使用 `BackgroundWorker` 类来实现类似于 .NET 4.5 中 `Task` 类的功能。`BackgroundWorker` 允许在后台执行耗时操作,同时不会阻塞用户界面线程,并支持进度报告和取消操作。尽管它有一些局限性,如复杂的事件处理模型和不灵活的任务管理方式,但在某些情况下仍能有效替代 `Task` 类。
|
1月前
|
API
使用`System.Net.WebClient`类发送HTTP请求来调用阿里云短信API
使用`System.Net.WebClient`类发送HTTP请求来调用阿里云短信API
21 0
|
3月前
|
缓存 程序员
封装一个给 .NET Framework 用的内存缓存帮助类
封装一个给 .NET Framework 用的内存缓存帮助类
|
5月前
|
存储 Go C#
【.NET Core】深入理解IO之File类
【.NET Core】深入理解IO之File类
75 6
|
5月前
|
存储 开发框架 缓存
【.NET Core】你真的了解HttpRuntime类吗
【.NET Core】你真的了解HttpRuntime类吗
46 0
|
6月前
|
消息中间件
.NET 中 Channel 类简单使用
`System.Threading.Channels` 提供异步生产者-消费者数据结构,用于.NET Standard上的跨平台同步。频道实现生产者/消费者模型,允许在任务间异步传递数据。简单示例展示如何创建无界和有界频道,以及多生产者和消费者共享频道的场景。频道常用于内存中的消息队列,通过控制生产者和消费者的速率来调整系统流量。
|
6月前
|
SQL 数据库连接 数据库
VB.NET 中使用SqlConnection类连接到Microsoft SQL Server数据库的详细步骤
VB.NET 中使用SqlConnection类连接到Microsoft SQL Server数据库的详细步骤
290 0
|
开发框架 前端开发 .NET
ASP.NET Core 基础知识之​Startup 类配置
Startup 类配置服务和应用的请求管道。
151 0

热门文章

最新文章