“服务器激活的对象”是由服务器控制生存期的对象。它们只在客户端调用对象的第一个方法时,根据需要由服务器创建。服务器激活的对象只支持默认的构造函数。要对远程对象使用参数化的构造函数,可以使用“客户端激活”或“动态发布”(参见下文)。服务器激活的对象也被称为众所周知的对象类型,因为其位置 (URL) 是预先发布和已知的。服务器激活的对象有两种激活模式:Singleton 和 SingleCall,下面将介绍这两种模式。要创建服务器激活类型的实例,可以通过编程的方法配置应用程序,也可以进行静态配置。服务器激活的配置相当简单,例如,以下代码片段
| <service> <wellknown mode="SingleCall" type="Hello.HelloService, Hello" objectUri="HelloService.soap" /> </service> |
描述了一个服务器激活的 (wellknown) 类型,其激活方式设置为 SingleCall。有关配置服务器激活的 Remoting 的详细信息可参阅微软MSDN。
Singleton
这些对象遵循传统的 Singleton 设计模式,在这种模式中,任何时候内存中都只有一个实例,所有客户端都接受该实例提供的服务。但要注意,这些类型都有与之相关的默认生存期(请参阅下文的对象生存期管理一节)。这意味着对于可进行远程处理的类,客户端不必总是接收对这个类的同一实例的引用。后一种情况对状态管理很有意义,也是这种 Remoting 模式与传统的 Singleton 模式(要求对象标识相同)的不同之处。如果您的设计需要使用传统的 Singleton 状态管理模式,有两种方法可以解决此问题。一种方法是忽略默认的对象租用行为,以便“在主机应用程序域运行时始终”将对象保存在内存中。以下代码片段说明了如何做到这一点:
| public class MyClass : MarshalByRefObject { public override Object InitializeLifetimeService() { return null; } } |
如上所述,这种机制将对象锁定到内存中,防止对象被回收,但只能在主机应用程序运行期间做到这样。对于 IIS 集成,如果集成 Remoting 会话的 IIS 或 IIS 进程被回收(很多原因可以导致这种现象),那么对象将被破坏。
要完全依赖 Remoting 的线程安全的 Singleton 状态数据,我们需要做三件事:
1、忽略租用机制,使租用成为无限期的,如上所述。
2、将远程服务器集成在我们自己设计的进程中,例如,可以完全控制其生存期的系统服务。虽然此进程也可以被回收,但与回收 IIS 辅助进程相比,其操作更明显,更易察觉。有关此机制的详细信息,请参阅下文的产品特性一节。
3、将远程服务器开发为线程安全的服务器,因为这样可以使用多个线程来完成客户端的并发请求。这意味着,管理并发将写入共享资源并通常关注对静态内存的共享访问。
SingleCall
SingleCall 远程服务器类型总是为每个客户端请求设置一个实例。下一个方法调用将改由其他实例进行服务。从设计角度看,SingleCall 类型提供的功能非常简单。这种机制不提供状态管理,如果您需要状态管理,这将是一个不利之处;如果您不需要,这种机制将非常理想。也许您只关心负载平衡和可伸缩性而不关心状态,那么在这种情况下,这种模式将是您理想的选择,因为对于每个请求都只有一个实例。如果愿意,开发人员可以向 SingleCall 对象提供自己的状态管理,但这种状态数据不会驻留在对象中,因为每次调用新的方法时都将实例化一个新的对象标识。
本U R L:http://www.qqread.com/dotnet/y520949000.html相关专题
- .NET移动与嵌入式技术 (5950篇文章)
- .NET开发手册 (5652篇文章)
- vb.net入门——ToolBar 控件的使用 (267次浏览)
- vb.net入门——OpenFileDialog 组件的使用 (75次浏览)
- vb.net入门——FontDialog 组件的使用 (52次浏览)
- vb.net用Graphics画一个五角星 (46次浏览)
- vb.net入门——FolderBrowserDialog 组件的使 (45次浏览)
- vb.net绘制干扰点 (44次浏览)
- vb.net入门——ColorDialog 组件的使用 (41次浏览)
- vb.net巧用ToolTip控件获取鼠标坐标 (39次浏览)
- 用vb.net创建一个鼠标绘图程序 (39次浏览)
- vb.net入门——SaveFileDialog 组件的使用 (38次浏览)



