摘要:
客户端和服务器怎样检测到另一端是否可用?此时,我们遇到的问题是什么呢?对于客户端,答案比较简单。只要客户端调用远程对象上的方法,就会产生一个 System.Runtime.Remoting.RemotingException 类型的异常。此时,只需处理这个异常,完成一些必要 的工作,如重试、写日志以及通知用户等。 对于服务器,服务器应何时检测客户端是否还在?即服务器何时可以清理为该客户端保存的资 源?可以一直等待来自客户端的下一个方法调用,但该客户端可能再没有方法调用了。在 COM 领 域中,DCOM 协议使用 ping 机制解决这个问题。客户端把 ping 和引用对象的信息发送给服务器。 因 阅读全文
摘要:
远程方法调用中的参数类型不仅可以是基本的数据类型,还可以是我们自己定义的类。为了进 行远程处理,必须区分下面 3 种类型的类:● 按值编组的类——这种类通过信道进行序列化。要编组的类必须用 Serializable 特性标记。 这些类的对象没有远程标识,因为完整的对象通过信道编组,而且与客户端序列化的对象 独立于服务器对象(或相反)。按值编组的类也称作未绑定的类,原因是它们没有依赖于应用 程序域的数据。● 按引用编组的类——这种类有远程标识。对象不是在网络上传递的,而是返回一个代理。 按引用编组的类必须派生自 MarshalByRefObject。MarshalByRefObjects 称为应 阅读全文
摘要:
Activator.GetObject()方法调用 RemotingServices.Connect()方法连接已知对象。在 Connect()方法中,Unmarshal()方法不但在创建代理时发生,也在创建特使接收器时发生。代理使用一个特使接收器链把消息传递到信道中。所有接收器都是侦听器,它们可以更改消息,执行一些额外的操作,如创建锁、写事件以及执行安全检查等。所有消息接收器都实现 IMessageSink 接口,这个接口定义一个属性和两个方法:● NextSink属性——接收器使用这个属性到达下一个接收器,并向前传递消息。 ●SyncProcessMessage()方法 ——对于同步消息, 阅读全文
摘要:
客户端可以使用和创建远程 Activator 类。使用 GetObject()方法,可以得到服务器激活的远程对象或知名的远程对象的代理。CreateInstance()方法返回客户端激活的远程对象的代理。 new 运算符可以代替 Activator 类激活远程对象。为此,还必须使用 RemotingConfiguration 类在客户端中配置远程对象。1. 应用程序的 URL在激活对象时,必须指定远程对象的 URL。这个 URL 与使用 Web 浏览器进行浏览时所使用的 URL 相同。第一部分指定协议、服务器名或 IP 地址、端口号和 URI,其中 URI 在服务器中以下面的格式注册远程对象时 阅读全文