Remoting初学

学习了Remoting
一种分布式架构(实现,在别一台主机上的类或程序组,通过Remoting开通的通道,可以在另一台机子上调用这些类及程序组)。
1、通道
通道现有TCP及HTTP两种。
2、激活模式
   1)、服务端激活
 服务端激活有两种模式:Singleton 和 SingleCall
 Singleton 类型任何时候都不会同时具有多个实例。如果存在实例,所有客户端请求都由该实例提供服务。如果不存在实例,服务器将创建一个实例,而所有后继的客户端请求都将由该实例来提供服务。由于 Singleton 类型具有关联的默认生存期,即使任何时候都不会有一个以上的可用实例,客户端也不会总接收到对可远程处理的类的同一实例的引用。
 SingleCall 远程服务器类型总是为每个客户端请求设置一个实例。下一个方法调用将改由其他实例进行服务。从设计角度看,SingleCall 类型提供的功能非常简单。这种机制不提供状态管理,如果您需要状态管理,这将是一个不利之处;如果您不需要,这种机制将非常理想。也许您只关心负载平衡和可伸缩性而不关心状态,那么在这种情况下,这种模式将是您理想的选择,因为对于每个请求都只有一个实例。如果愿意,开发人员可以向 SingleCall 对象提供自己的状态管理,但这种状态数据不会驻留在对象中,因为每次调用新的方法时都将实例化一个新的对象标识。
 config配置如下:
 <?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="conn" value="server=10.10.48.123\oo-pc;database=Leo;uid=sa;pwd=123456"/>
    <add key="filepath" value="C:\sss\"/>
  </appSettings> 
  <system.runtime.remoting>
    <application name="RemoteServer">
      <service>
        <!--单实例,每一次激活调用会共用一个对应的实例,mode:Singleton-->
        <!--<wellknown type="RemoteObject.MyObject,RemoteObject" objectUri="RemoteObject.MyObject"
            mode="Singleton" />-->
        <!--多实例,每一次激活调用会有一个对应的实例,mode:SingleCall-->
        <wellknown type="RemoteObject.MyObject,RemoteObject" objectUri="RemoteObject.MyObject"
            mode="SingleCall" />       
      </service>
      <channels>
        <channel ref="tcp" port="9999"/>
      </channels>
    </application>
  </system.runtime.remoting>
</configuration>
服务端引用:
 RemotingConfiguration.Configure("RemotingServer001.exe.config",false);
   2)、客户端激活
 客户端激活的时间是在客户端请求的时候,而服务端激活远程对象的时间是在调用对象方法的时候
        config配置如下:
 <configuration>
  <system.runtime.remoting>
    <application name="RemoteServer">
      <service>
        <activated type="RemoteObject.MyObject,RemoteObject"/>
      </service>
      <channels>
        <channel ref="tcp" port="9999"/>
      </channels>
    </application>
  </system.runtime.remoting>
</configuration>
调用:
//客户端激活的时间是在客户端请求的时候(可以调带参数构造方法),而服务端激活远程对象的时间是在调用对象方法的时候
        //服务器端激活模式
        app = (RemoteObject.MyObject)Activator.GetObject(typeof(RemoteObject.MyObject),
                                            System.Configuration.ConfigurationManager.AppSettings["ServiceURL"]);
       //客户端激活模式
       //RemoteObject.MyObject app = (RemoteObject.MyObject)Activator.CreateInstance(typeof(RemoteObject.MyObject),
                //                            null, new object[] { new System.Runtime.Remoting.Activation.UrlAttributeSystem.Configuration.ConfigurationSettings.AppSettings["ServiceURL"]) });
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值