.net remoting 易则易知,简则易从

.net remoting概念很多,先做个事例,然后对着事例慢慢讲解吧.

第一步:创建一个知名的远程对象(此类必须要继承MarshalByRefObject,至于为什么要继承,下面的内容再讲解)代码如下

Code

用csc /t:library DemoRemoting.cs命令编译为一个DemoRemoting.dll.

第二步:创建服务器端控制台程序演示.代码如下

Code

启动后等待客户端连接.

第三步:编写客户端测试程序(为简单方便,所以还是使用控制台程序),代码如下

Code

现在也启动客户端程序,会发现如下图所示的图片.那表示你已经成功的做了个分布式程序了.

现在因该对remoting有初步的了解了吧.那我就继续往下讲理论知识吧.

remoting需要服务器端和客户端时时连接,这和MSMQ机制不一样.如果硬要拿这两种技术比较的话.我觉得就像datareader和dataset的区别.

remoting需要两端时时连接,如一方不在,那就会出现异常.而MSMQ就好象dataset一样,可以支持断开式,同步,异步的连接.

现在说说remoting的通信原理.

服务器端和客户端通过通道相互传送消息,下面先讲通道吧(学名是信道).

.net framework自带了3种类型的服务器端通道,分别是TcpServerChannel,HttpServerChannel,IpcServerChannel.其实我觉得我这么说是错的,因为这三种通道不但可以创建在服务器端,他们还可以创建在客户器端.因为他们继承了IChannelSender和IChannelReceiver.

IChannelSender和IChannelReceiver都是IChannel的派生类,IChannel是所有通道必须继承的基类(当我们创建定制的通道时).

IChannel有两个只读属性.分别是Channelname,ChannelPriority.分别是通道名称和级别.这两种属性在实例化一个通道时已经赋予了值了,因为它们只有get,没set,所以我们没办法改变它们默认值(这句话不是完全正确,虽然没办法通过set赋值,但我们可以通过它们的构造函数重新赋值).

tcp,http的name分别为tcp server,http server,它们的通信级别默认都是1,而ipc默认级别是20.下面我们通过构造函数来重赋值,代码如下.

Code

我相信细心的网友在实例化通道类时会发现它的构造函数多达5个.而其中一个是带idictionary和iserverchannelsinkprovider......

本想今天一次性把remoting写完,可发现刚写了信道就已经很累了,下次继续写吧.未完哦

原文地址:https://www.cnblogs.com/xuting/p/1516361.html