在 Remoting 中使用 Event 主要是为了实现 CallBack 机制,让服务器在接收到某个 "消息" 时,主动调用某个或多个客户端的方法。Runtime.Serialization.Formatters;Formatters.Remoting;Remoting.Channels;Channels.Remoting{阅读全文>
发表于 @ 2007年03月19日 19:30:00|评论(loading...)|编辑|收藏
使用配置文件替代硬编码可使应用程序拥有更高的灵活性,尤其是对分布式系统而言,意味着我们可以非常方便地调整分布对象的配置。Remoting 的配置文件比较简单,详细信息可以参考 MSDN。ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.NETDEVFX.v20.chs/dv_fxgenref/html/52ebd450-de87-4a87-8bb9-6b13426fbc63.htm.TcpChannel channel = new TcpChannel(properties, cbin, sbin);RemotingConfiguration.Client.cs TcpChannel channel = new TcpChannel();改成对应的配置文件,就是下面这个样子。阅读全文>
发表于 @ 2007年03月19日 19:30:00|评论(loading...)|编辑|收藏
追踪服务是可插入的,我们可以将一个或多个自定义跟踪处理程序注册到追踪服务中,当发生封送、取消封送或断开当前 AppDomain 中的对象或代理时,注册到中的每个追踪处理程序都将被远程处理调用。创建自定义追踪处理程序很简单,实现 ITrackingHandler 接口,然后调用 TrackingServices.RegisterTrackingHandler() 将其实例注册到跟踪服务即可。TrackingServices 实用类还可以注销(TrackingServices.UnregisterTrackingHandler)追踪处理程序,或查询(TrackingServices.RegisteredHandlers)所有的已注册追踪处理程序。Runtime.阅读全文>
发表于 @ 2007年03月19日 19:29:00|评论(loading...)|编辑|收藏
Unmarshal:接受 ObjRef 并从它创建一个客户端代理对象。ObjRef 是远程对象的可序列化表示,用于跨应用程序域边界传输对象引用。达到其他应用程序域后,需立即分析 ObjRef,以便为该对象创建一个代理(通常连接到实际的对象)。在拆收处理过程中,分析 ObjRef 以提取远程对象的方法信息,并创建透明代理和 RealProxy 对象。ObjRef 包含:描述所封送对象的 Type 和类的信息,唯一标识特定对象实例的 URI,以及有关如何到达对象所在的远程处理分支的相关通信信息。阅读全文>
发表于 @ 2007年03月19日 19:28:00|评论(loading...)|编辑|收藏
了解 Microsoft .NET Remoting 基础结构和 Microsoft ASP.NET Web 服务如何进行跨进程通信,了解这两种技术的工作原理以及如何为您的应用程序选择合适的技术阅读全文>
发表于 @ 2007年03月19日 19:27:00|评论(loading...)|编辑|收藏
如果代理和远程对象不在同一个应用程序域中,则堆栈中的所有方法调用参数会被转换为消息并被传输到远程应用程序域,这些消息将在该远程应用程序域中被转换为原来的堆栈帧,同时该方法调用也会被调用。根据对象是客户端激活对象还是服务器激活对象,以及它们是单一元素对象还是单一调用对象,该进程会有所不同。只有在客户端调用远程对象的某个方法时,该远程对象才会被激活。当调用抵达服务器时,框架将从消息中提取 URI,检查远程处理框架表以便定位与 URI 匹配的对象引用,然后在必要时将对象实例化,并将方法调用转发至对象。阅读全文>
发表于 @ 2007年03月19日 19:25:00|评论(loading...)|编辑|收藏
在方法调用之间,单一调用对象不能保留状态信息。“客户端激活的对象 (CAO)”是服务器端的对象,收到来自客户端的请求时会激活这些对象。客户端激活的对象可以为其特定的客户端(不能跨越不同的客户端对象)保存方法调用之间的状态信息。当客户端要在同一服务器对象中维护状态信息时,可以通过许多方法扩展租用阶段,使对象继续生存。客户端可以调用 RemotingServices.GetLifetimeService 方法,以从 AppDomain 的租用管理器获取服务器对象的租用时间。当远程对象租用过期时,租用管理器将通知负责人提出更新租用的申请。阅读全文>
发表于 @ 2007年03月19日 19:25:00|评论(loading...)|编辑|收藏
Remoting 的异步调用和单个应用程序域异步编程基本相同。Collections;Collections.Generic;Reflection;Threading;Runtime.Serialization;Serialization.Formatters;Formatters.Remoting;Remoting.Channels;Channels.Remoting{阅读全文>
发表于 @ 2007年03月19日 19:22:00|评论(loading...)|编辑|收藏
调用上下文(CallContext)提供了用于存储属性集的数据槽,可以让我们在调用服务器方法时将一些额外数据一并传送过去。当然,这些额外数据有点限制,就是必须要实现 ILogicalThreadAffinative 接口。调用上下文在应用程序域边界被克隆,其数据槽不在其他逻辑线程上的调用上下文之间共享。Runtime.Serialization;Serialization.Remoting;Remoting.Remoting{阅读全文>
发表于 @ 2007年03月19日 19:22:00|评论(loading...)|编辑|收藏
信道(Channel)是 Remoting 体系的承载平台,负责处理客户端和服务器之间的通讯,其内容包括跨域通讯、消息传递、对象编码等等。信道必须实现 IChannel 接口,根据通讯方向又分别提供了继承版本 IChannelReceiver 和 IChannelSender。TcpServerChannel channel = new TcpServerChannel(801);程序域内可以同时使用多个信道,每个信道需提供唯一的名称,以便 ChannelServices 进行管理,同时信道会随程序域的退出自动销毁。TcpServerChannel channel = new TcpServerChannel("tcp801", 801);阅读全文>
发表于 @ 2007年03月19日 19:21:00|评论(loading...)|编辑|收藏