信道(Channel)是 Remoting 体系的承载平台,负责处理客户端和服务器之间的通讯,其内容包括跨域通讯、消息传递、对象编码等等。信道必须实现 IChannel 接口,根据通讯方向又分别提供了继承版本 IChannelReceiver 和 IChannelSender。Remoting 框架为我们提供了 IPC、TCP 以及 HTTP 的实现版本,当然我们还可以在网络上找到其他协议的实现版本。
TcpServerChannel channel = new TcpServerChannel(801);
ChannelServices.RegisterChannel(channel, false);
我们可以使用实用类 ChannelServices 来管理程序域内的信道,诸如注册、注销等等。程序域内可以同时使用多个信道,每个信道需提供唯一的名称,以便 ChannelServices 进行管理,同时信道会随程序域的退出自动销毁。
TcpServerChannel channel = new TcpServerChannel("tcp801", 801);
ChannelServices.RegisterChannel(channel, false);
IChannel c2 = ChannelServices.GetChannel("tcp801");
Console.WriteLine(Object.ReferenceEquals(channel, c2));
channel.StopListening(null);
channel.StartListening(null);
foreach (IChannel c in ChannelServices.RegisteredChannels)
{
Console.WriteLine(c.ChannelName);
}
ChannelServices.UnregisterChannel(channel);
信道内部包含由多个接收器(Sink)组成的接收链(Sink Chain)。接收器用于处理客户端和服务器之间的来往消息,诸如格式化程序接收器(FormatterSink)、传输接收器(TransportSink)或堆栈生成器接收器(StackBuilderSink)等等。每个接收器或实现 IClientChannelSink,或实现 IServerChannelSink。
Remoting 采用信道接收提供程序(Channel Sink Provider,实现 IClientChannelSinkProvider、IClientFormatterSinkProvider 或 IServerChannelSinkProvider 接口的对象) 来创建接收器,已有的提供程序包括 BinaryClientFormatterSinkProvider / BinaryServerFormatterSinkProvider、SoapClientFormatterSinkProvider / SoapServerFormatterSinkProvider。
在客户端接收链中第一个接收器通常是格式化程序接收器(IClientFormatterSink),且必须实现 IMessageSink。代理通过信道接收提供程序找个该接收器,并通过接口方法将消息传递给链中所有的接收器,最后由传输接收器发送到服务器。同样,在服务器排在最后的接收器是格式化程序接收器和堆栈生成器接收器,分别执行反序列化和将将消息转换成相应的调用堆栈。
TcpServerChannel channel = new TcpServerChannel("tcp801", 801, new BinaryServerFormatterSinkProvider());
ChannelServices.RegisterChannel(channel, false);
...
TcpClientChannel channel = new TcpClientChannel("tcp801", new BinaryClientFormatterSinkProvider());
ChannelServices.RegisterChannel(channel, false);
只要看看 BinaryClientFormatterSinkProvider 和 BinaryClientFormatterSink 的代码就很容易理解如何使用提供者模型构造一个接收链了。
BinaryClientFormatterSinkProvider
public IClientChannelSink CreateSink(IChannelSender channel, string url, object remoteChannelData)
{
IClientChannelSink sink1 = null;
if (this._next != null)
{
sink1 = this._next.CreateSink(channel, url, remoteChannelData);
if (sink1 == null)
{
return null;
}
}
SinkChannelProtocol protocol1 = CoreChannel.DetermineChannelProtocol(channel);
BinaryClientFormatterSink sink2 = new BinaryClientFormatterSink(sink1);
sink2.IncludeVersioning = this._includeVersioning;
sink2.StrictBinding = this._strictBinding;
sink2.ChannelProtocol = protocol1;
return sink2;
}
BinaryClientFormatterSink
public BinaryClientFormatterSink(IClientChannelSink nextSink)
{
this._includeVersioning = true;
this._channelProtocol = SinkChannelProtocol.Other;
this._nextSink = nextSink;
}
public IClientChannelSink NextChannelSink
{
get
{
return this._nextSink;
}
}
信道内的接收器是可 "插入的",这意味着我们可以实现自己的接收器,并将其装配到信道接收链中。比如对消息进行加密,或者对数据流进行压缩等等。
有关细节可参考:
《
.NET Remoting Customization Made Easy: Custom Sinks》
《
如何定制Sink扩展.Net Remoting功能》
分享到:
相关推荐
U872读取数据源出现未知错误解决方法
.NET Remoting 支持多种通信信道,其中最常用的是 TcpChannel 和 HttpChannel。 1. **TcpChannel**: - 基于 Socket 的传输工具,使用 TCP 协议进行通信。 - 默认使用二进制格式序列化消息对象,传输效率较高。 ...
.NET Remoting的工作流程大致如下:客户端通过代理对象调用远程方法,消息通过选定的信道和格式标识符进行编码和解码,然后在服务器端执行实际的方法,并将结果返回给客户端。 总结来说,.NET Remoting是一个强大的...
在IIS中采用静态类方式实现,缓存一个Remoting连接信道。 具体请看App_Code目录下的Remoting.cs文件。 1.先进行CS应用程序中的运行文件。 2.打开网页测试即可,网页向静态类取数据。 注意:Remoting 的连接地址。
【标题】:“基于.Net Remoting和构建线程池实现分布式计算” 【描述】:该文档介绍了如何利用.Net Remoting技术以及线程池来构建分布式计算系统,旨在提供一种实用的分布式计算解决方案。 【标签】:分布式、...
压缩包中的"Remoting从入门到精通"很可能包含了一系列逐步指导教程,涵盖了如何创建和配置Remoting对象、设置信道、在IIS和Windows服务中部署等。这些示例代码将有助于开发者了解如何实际操作,从而更好地掌握...
.NET Remoting配置文件主要用于定义远程对象的各种行为,包括但不限于通信信道(Channel)的选择、服务端激活对象(SAO)的类型设置等。这些配置使得开发者可以在不触及代码的情况下调整远程对象的行为,从而增强了系统...
总的来说,这个Remoting初级应用实例展示了如何设置服务器端的透明代理类、注册信道和服务,以及客户端如何通过信道连接服务器并调用远程方法。这种技术在分布式系统和跨进程通信中非常有用,尤其是在.NET框架的应用...
.NET Remoting技术的网络信道体系结构包含5个核心对象:代理(Proxy)、消息(Message)、消息接收器(Message Sink)、格式化器(Formatter)和信道(Channel)。它们共同协作,使得远程对象的调用能够像本地对象...
2. WebService的体系结构大致分为五个层次:HTTP传输信道、XML的数据格式、SOAP封装格式、WSDL的描述方式以及UDDI。在.NET环境下,WebService的结构比较简单,基于.netframework和IIS,便于理解和应用。要创建一个...
.NET Remoting的体系结构包括了多个层次,从最底层的传输信道到高层的应用程序逻辑。配置文件(如app.config或web.config)用于指定这些层次的具体实现细节,比如使用的信道类型、序列化格式、对象的生存期策略等。 ...
.NET Remoting 是.NET Framework中用于远程对象通信的机制,它允许对象在不同地址空间或不同应用域中进行通信。开发者可以通过.NET Remoting创建和调用远程服务,这样应用程序的不同部分可以在不同的服务器或应用...
#### 五、创建.NET Remoting应用程序实例 ##### 5.1 创建远程对象 以创建一个简单的远程对象为例: 1. **创建项目**:在Visual Studio中新建一个.NET Framework的类库项目,命名为`TestRemoteObject`。 2. **编写...
.Net Remoting的特点包括:能够实现网络对象的无缝通信,具有高性能和安全性,能与Web技术无缝连接,支持远程处理的TCP信道作为基本通信信道。.Net Remoting技术在分布式计算中起到了重要的作用,特别适用于需要高效...
.NET Remoting 是微软.NET框架提供的一种跨进程通信技术,它允许不同进程间的对象互相调用方法,仿佛这些对象都在同一进程中。在.NET面试中,理解并掌握.NET Remoting的原理和基本实现方式是非常重要的,特别是在...
WCF整合了多种微软的技术,如ASMX、.NET Remoting、Enterprise Service、WSE以及MSMQ,为开发者提供了一个统一的框架,用于构建安全、可靠且可扩展的分布式应用。 **一、WCF的核心特性** 1. **面向服务架构(SOA)...
5. **配置Remoting服务**:在`WEB-INF/flex/remoting-config.xml`中配置调用Java类的信道。定义一个名为“UserManager”的目的地,指定要调用的Java类`com.rocd.flex.biz.UserManager`。 完成Java部分后,我们需要...
WCF整合了多种微软的通信技术,如ASMX、.NET Remoting、Enterprise Services(COM+)、WSE和MSMQ,为开发安全可靠的分布式应用提供了一种统一的模型。 即时通讯软件的设计通常需要考虑以下几个关键知识点: 1. **...
自从微软提出.NET战略以来,为了满足构建企业级分布式应用的需求,陆续推出了多项技术和产品,包括ASP.NET Web服务、.NET Remoting、Message Queuing以及Enterprise Service等。虽然这些技术在一定程度上解决了...
然而,WebService在使用HTTP信道传输信息时,存在一定的性能开销,这在系统负载较大时可能会成为瓶颈。此外,WebService的网络安全措施需要额外的配置,如使用HTTPS来保证传输安全。 .NET Remoting是一种更为直接的...