以下写的并不是通道的基础知识,而是一些思考,并且需要经过实际程序验证。
一、服务器端
1、服务器端通道必须是TcpChannel或者TcpServerChannel这两种类对象。
2、服务器端同一端口,不能同时注册多个通道;
3、一个通道可以建多个远程对象,但是注册时,必须指定不同的URI。如果用同一个URI注册,后面的对象会覆盖前面的对象。例如:
    RemotingConfiguration.RegisterWellKnownServiceType(typeof(AnotherObj), "BroadCastMessage.soap", WellKnownObjectMode.Singleton);
    RemotingConfiguration.RegisterWellKnownServiceType(typeof(ThirdObj), "BroadCastMessage.soap", WellKnownObjectMode.Singleton);
    那么客户端通过URI:tcp://localhost:8080/BroadCastMessage.soap,只能得到第二个声明的对象。
    注:这个很好理解,就像在一个管道里面有两个对象但却只有一个URI,客户端不知道到底要用哪个,

二、客户端
1、
   客户端进程可以同时注册多个通道,但是必须用不同的通道名称。如果不指定通道名称,则系统自动命名为"http"或"tcp"
   (注意,这里是进程级别的。假如一个PC上,运行两个客户端,分别注册一个通道,名称一致也无妨)
2、
   在默认情况下,即使不主动注册通道,而直接使用Activator.GetObject去获取远程对象,系统会默认注册一个TcpClientChannel的通道,通道名称为"tcp";
   在多线程情况下,每个线程都去Activator.GetObject一个远程对象,跟踪当前应用程序的所有通道,发现也始终只有一个名称为"tcp"的通道
   注:理论上,我们在客户端可以不注册通道,而使用默认的通道。但有例外,如下3

3、但是如果使用事件机制的话,由于安全级别的限制,客户端必须使用TcpChannel,那么这时候,必须自己手动注册通道。
   原因如下:
在VS2003中,将序列化的安全级别提高了。所以,在注册通道时,应该将TypeFilterLevel设置为Full;
具体方法,在服务端注册通道的代码:
BinaryServerFormatterSinkProvider serverProvider = new BinaryServerFormatterSinkProvider();
BinaryClientFormatterSinkProvider clientProvider = new BinaryClientFormatterSinkProvider();
serverProvider.TypeFilterLevel = TypeFilterLevel.Full;

IDictionary props = new Hashtable();
props["port"] = 0;

HttpChannel channel = new HttpChannel(props,clientProvider,serverProvider);
ChannelServices.RegisterChannel(channel);

另外在项目中记得加上命名空间的引用:
using System.Runtime.Serialization.Formatters;
否则无法识别TypeFilterLevel.

转载于:https://www.cnblogs.com/peijihui/archive/2011/02/18/1958085.html

.Net Remoting 1相关推荐

  1. Microsoft .Net Remoting系列专题之二:Marshal、Disconnect与生命周期以及跟踪服务

    Microsoft .Net Remoting系列专题之二 一.远程对象的激活 在Remoting中有三种激活方式,一般的实现是通过RemotingServices类的静态方法来完成.工作过程事实上是 ...

  2. web service 和 remoting 有什么区别

    其实现的原理并没有本质的区别,在应用开发层面上有以下区别: 1.Remoting可以灵活的定义其所基于的协议,如果定义为HTTP,则与Web Service就没有什么区别了,一般都喜欢定义为TCP,这 ...

  3. 远程处理Remoting

    日程 ?应用程序域 ?Remoting和原理 ?编程式和管理式配置实例 用应用程序域 操作系统和运行库环境通常会在应用程序间提供某种形式的隔离.例如,Microsoft Windows 使用进程来隔离 ...

  4. .NET Remoting中的通道注册

    今天我的同事使用Remoting注册一个新通道.奇怪的是,通道始终无法注册,总是报告异常"该通道已被占用".我明白这个异常出现的原因,但不明白的是此时系统并未使用任何一个通道,为何 ...

  5. 用Remoting 实现一个文件传输组件

    为了传送文件,用remoting 实现很简单容易,有工程源码和演示程序下载,是从我写的一个网络库的一个子模块:有注解,不加以文字说明了. /**//* 作者:S.F. blog:www.cnblogs ...

  6. Flex与ASP.NET通过Remoting方式进行通讯

    前两天研究了一下Flex与.NET如何进行数据交互,并写了一个文档,后面叙述得还不是很详细,还可以再研究深一点.本文是关于Flex与ASP.NET通过Remoting方式进行通讯的内容,过段时间有空还 ...

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

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

  8. 使用remoting远程控制编译机

    远程对象服务器 using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using S ...

  9. 据lovecherry的一步一步学Remoting序列文章学习.net Remoting日记(2)

    今天学习了服务器端激活和客户端激活的区别!可还是出现了一点点的差错,经过对比得到正确的调用方法,整理如下: 1.服务器端激活,分为两种方式Singleton和SingleCall方式 Server端A ...

  10. Remoting Practice Sample

    Remoting Practice Sample 这两天研究了一下Remoting, 改了MSDN 的例子. 那个例子不是很方便. 我做了如下改进: 整个sample做成一个solution 用了wi ...

最新文章

  1. 软件研发之道——知识产权
  2. Redis的字典扩容与ConcurrentHashMap的扩容策略比较
  3. 将通讯录导入到摩托罗拉A1800通讯录中
  4. mxnet基础到提高(36)-单层神经网络
  5. 【Android】动态更新Icon
  6. BetterAndBetter(BAB)的使用详解
  7. 1.1 Python 安装
  8. java中各种集合的用法和比较
  9. cad lisp 法兰6_南昌平板法兰加工设备_山东平安数控机械有限公司
  10. 中望CAD的引线标注格式怎么改_大神总结的CAD设计五个段位 快来看看你在哪个阶段...
  11. CloudStack 4.4学习总结之注册ISO
  12. xp系统internet信息服务器地址,XP系统下Internet信息服务IIS的安装方法
  13. vue前端页面数据加载添加loading效果
  14. 【ARM】Linux驱动移植
  15. 中职计算机组装与维修知识点,中职计算机组装与维修的教学分析与对策
  16. 在ESNP中还原内网私接小路由器导致用户无法上网场景
  17. 【C++11】包装器
  18. Python数据分析高薪实战第四天 构建国产电视剧评分数据集
  19. hadoop-ykt(自定义key)
  20. Springboot毕设项目基于WEB的延边旅游网 5jjp2java+VUE+Mybatis+Maven+Mysql+sprnig)

热门文章

  1. 终于要揭开神秘面纱?Magic Leap将要展示产品
  2. iOS 动态更换icon
  3. 经典算法——堆排序笔试题
  4. 使用Visual Studio宏来自动生成代码 [ Visual Studio | 宏 | 自动生成代码 ]
  5. C#面向对象(一) 封装
  6. 布赖恩·凯利看好比特币现金:更多的用例可以转化为价值
  7. Resource通配符路径 ——跟我学spring3
  8. C# 枚举中的位运算
  9. mysql驱动名更新
  10. localhost与127.0.0.1的区别