新手对一个框架的一点理解

 

 
microsoft? .NET Remoting 是一个丰富的、可扩展的框架,它使得处于不同 AppDomain、不同过程和不同机器上的对象可以实现无缝通信。.NET Remoting 提供的编程模型和运行时支持功能强大而又易于使用,能够实现透明的交互操作。本文将浏览 Remoting 体系结构的不同构造块,并研究一些应用 .NET Remoting 的常见方案。.NET Remoting 对象可以作为一种 Web 服务使用允许从任何能够执行 SOAP 调用的客户端访问 .NET Remoting 对象。

.NET Remoting 对象
有三类对象可以被配置为 .NET 远程对象。您可以根据应用程序的需要选择对象类型。本节将详细介绍这些对象。
“单一调用对象”仅为一个请求提供服务。在需要对象完成的工作量有限,并且不必存储状态信息的情况下,单一调用对象非常有用。单一调用对象可以被配置为负载平衡模式。在方法调用之间,单一调用对象不能保留状态信息。
“单一元素对象”可以为多个客户端提供服务,因此可以通过保存客户端调用的状态信息来实现数据共享。当客户端需要明确地共享数据,并且不能忽略创建和维护对象的开销时,这种对象非常有用。“客户端激活的对象 (CAO)”是服务器端的对象,收到来自客户端的请求时会激活这些对象。这种激活服务器对象的方法与传统的 COM coclass 激活方法很相似。当客户端使用“new”操作符请求服务器对象时,将向远程应用程序发送一个激活请求消息。随后,服务器将创建被请求类的实例,并向调用它的客户端应用程序返回 ObjRef。客户端将使用此 ObjRef 创建代理。客户端的方法调用将在代理上执行。客户端激活的对象可以为其特定的客户端(不能跨越不同的客户端对象)保存方法调用之间的状态信息。每次“new”调用都会返回服务器类型的独立实
例的代理。

使用 .NET Remoting 传递对象

在 .NET Remoting 中,可以通过以下方式在应用程序之间传递对象:
1、作为方法调用的参数
示例:public int myRemoteMethod (MyRemoteObject myObj)

2、方法调用的返回值
示例:public MyRemoteObject myRemoteMethod(String myString)

3、访问 .NET 组件的属性或字段得到的值
示例:myObj.myNestedObject
对于 marshal By Value (MBV) 的对象,当它在应用程序之间传递时,将创建一个完整的副本。

对于 marshal By Reference (MBR) 的对象,当它在应用程序之间传递时,将创建该对象的引用。当对象引用 (ObjRef) 到达远程应用程序后,将转变成“代理”返回原始对象。

简单 .NET Remoting 服务器对象的代码示例

using System;
using System.Runtime.Remoting;
namespace myRemoteService
{
    // 有名的 Web 服务对象
    public class myRemoteObject : MarshalByRefObject
    {
        // myRemoteMethod 方法
        public String myRemoteMethod(String s)
        {
         return "Hello World";
        }
    }
}
访问此对象的客户端代码示例
using System;
using System.Runtime.Remoting;
using myRemoteService;
public class Client
{
    public static int Main(string[] args)
    {
        ChannelServices.RegisterChannel(new HTTPChannel(7055));
        // 创建 myRemoteObject 类的实例
        myRemoteObject myObj = ( myRemoteObject)Activator.GetObject(typeof(myRemoteObject);
        myObj. myRemoteMethod ("Hello World");
        return 0;
    }
}

租用生存期
对于那些具有在应用程序之外传送的对象引用的对象,将创建一个租用。租用具有一个租用时间。如果租用时间为 0,则租用过期,对象将断
开与 .NET Romoting 框架的连接。一旦 AppDomain 内部所有的对象引用都被释放,则下一个 GC 发生时对象将被回收。租用控制了对象的生
存期。
2、对象有默认的租用阶段。当客户端要在同一服务器对象中维护状态信息时,可以通过许多方法扩展租用阶段,使对象继续生存。
可以将服务器对象的租用时间设置为无限,这样 Remoting 在垃圾回收周期中就不会回收此对象。

3、客户端可以调用 RemotingServices.GetLifetimeService 方法,以从 AppDomain 的租用管理器获取服务器对象的租用时间。然后,客户端便可以通过 Lease 对象来调用 Lease.Renew 方法,以延长租用时间。

4、客户端可用 AppDomain 的租用管理器为特定的租用注册负责人。当远程对象租用过期时,租用管理器将通知负责人提出更新租用的申请。

如果设置了 ILease::RenewOnCallTime 属性,则每次调用远程对象时,都会用 RenewOnCallTime 属性指定的时间更新租用时间。
 
我是个新手,这里说的有些东西是参照别写的,所以,如果和你写的东西重复,请多多见谅。 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值