频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

微软 .NET Remoting体系结构评估

来源:Microsoft 作者: 出处:巧巧读书 2005-11-24 进入讨论组
上一页 1 2 3 4 5 6 7 8 9 10 11 下一页 
对象生存期管理

  .NET Remoting 为管理远程对象的生存期提供了功能强大的机制。如果我们的服务器对象不保留任何状态(如 SingleCall 对象),那么不必关注此进程,只需让 Remoting 基础结构完成要完成的工作即可,需要时,对象将作为垃圾被回收。
如果我们保留状态,无论是服务器激活的 Singleton 还是客户端激活的对象,我们可能都要参与生存期管理进程:对象租用。我们已经看到很小程度的参与,使用了一种简单(且有用)的方法,就是忽略 InitializeLifetimeService 方法,如以上对 Singleton 的介绍中所述。这就使我们能够在集成对象的进程运行期间始终保留对象。那么,这个对象生存期进程如何工作呢?

  Remoting 提供的对象管理机制基于租用原则:您永远不会拥有一个对象,只是借用它,只要持续支付就可以一直使用它。此过程将在下文中进一步介绍。但是,首先要简单介绍一下在 COM 领域中是如何处理对象清理的。DCOM 综合使用 ping 和引用计数两种方法来确定对象是否仍在运行,这样做不仅容易出错,而且对网络带宽的要求很高。使用引用计数时,最坏的情况是从来不会被完全理解,最好的情况也是很脆弱。过去(现在仍是)要对引用计数应用一些简单的规则才能使其发挥作用。COM 对象的 IUnknown 接口包括了 AddRef 和 Release 方法,需要由开发人员在适当的时候调用。有时程序员弄错了,结果造成对象没被删除,还导致相关的内存泄露。

  相反,Remoting 基于租用的生存期管理系统综合利用了租用、负责人和租用管理器。每个应用程序域都包含一个租用管理器,它将每个 Singleton 或客户端激活的对象的租用对象引用保存在其域中。每个租用可以有零个或多个相关的负责人,负责人能够在租用管理器确定租用过期时重新租用。这种租用功能是由 Remoting 基础结构通过 ILease 接口提供的,通过调用 InitializeLifetimeService 获得,如上文所述。ILease 接口定义了很多用于管理对象生存期的属性:

  1、InitialLeaseTime。确定租用最初的有效期。

  2、RenewOnCallTime。在每个方法调用后,更新此时间单元的租用。

  3、SponsorshipTimeout。负责人通知租用过期后,Remoting 要等待的时间。

  4、CurrentLeaseTime。距租用到期的时间(只读)。

  租用过期后,租用管理器将通知所有租用负责人,询问他们是否要更新租用。如果不更新,将释放相关的对象引用。

  负责人是可以为远程对象更新租用的对象。要成为负责人,您的类必须从 MarshalByRefObject 中导出并实现 ISponsor 接口。一个租用可以有多个负责人,一个负责人也可以参与多个租用。

  但值得注意的是,这种功能强大的机制只是对管理有状态的远程对象的生存期有意义。如上所述,您或者完全忽略它,利用它在其进程容器运行时将对象保存在内存中,或者完全参与到租用机制中。

  远程服务器集成

  有很多方法可以集成 .NET 远程服务器,主要分为两大类,如下所述。

  ASP.NET下的IIS集成

  在 IIS 下集成远程服务器端对象的能力是作为标准功能提供的。它有很多优势,包括支持安全性和可伸缩性。

  要在 IIS 下集成对象:

   1、开发远程类并从 MarshalByRefObject 中继承(或将类声明为可序列化)。
   2、使用 IIS 管理器创建一个虚拟的 Web 应用程序。
   3、将包含您的类的程序集放到虚拟 Web 应用程序的 bin 子文件夹中。
   4、创建一个 web.config 文件以保存 Remoting 服务器的配置定义,并将它放置到 Web 应用程序的虚拟根目录中。

  就这么简单。但是,您应该了解一些限制:

   1、不能为 IIS 集成指定应用程序名称,因为它是虚拟应用程序名称。
   2、必须使用 HHTP 通道。
   3、如果 Remoting 客户端也是一个 Web 应用程序,则启动时必须调用 RemotingConfiguration.Configure,它通常在 Global.asax 文件的 Application_Start 方法中。不能使用 <client> 标记来自动配置客户端 Web 应用程序。
   4、不要指定端口,因为 IIS 会进行端口分配。如果需要,您仍可以使用 IIS 管理来为虚拟应用程序指定端口。
   5、Remoting 应用程序域将集成在 Aspnet_wp.exe 辅助进程中,默认情况下,它将采用该进程的标识。

  注意:目前 ASP.NET 中有一个错误,要求将 Aspnet_wp.exe 辅助进程的进程标识设置为“system”或本地计算机帐户,默认设置中,machine.config 中的“machine”配置不正确,导致在域控制器的 IIS 下集成时,ASP.NET 应用程序出现错误 500“内部服务器错误”。可以论证的是,该错误是由于缺乏说明如何适当地配置计算机帐户的文档所造成的。

  在 IIS 下集成有很多功能上的优势:默认情况下,可以提供伸缩性、线程、审核、身份验证、授权和安全通信等功能。ASP.NET 辅助进程一直在运行,并且可以使用 machine.config 中的 <processModel> 元素进行线程和错误管理方面的微调。简而言之,IIS 的优势和功能都可用于远程服务器。

  但它也有一些缺点:您必须使用比 TCP 速度慢的 HTTP。另外,IIS 可能循环执行 ASP.NET 辅助进程,这将破坏所有 Singleton 的状态。对您来说,这可能是问题也可能不是问题,要取决于您的设计需要,因为客户端的下一个调用将重新启动 Singleton。您可以将 IIS 配置为不循环执行辅助进程,但这种能力很有限,特别是在 IIS 5 中,而且可能造成更进一步的影响。这里最根本的意思是,如果要求远程服务器的安全性,那么无疑要使用 IIS 集成。至于性能,只有在系统测试/使用过程中实际察觉到问题时,才需要考虑,而且总能在硬件上找到解决问题的办法。

本U R L:http://www.qqread.com/dotnet/y520949000.html 更多文章 更多内容请看.NET移动与嵌入式技术.NET开发手册专题,或进入讨论组讨论。
上一页 1 2 3 4 5 6 7 8 9 10 11 下一页 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章