• λ我爱Aspx >> Asp.Net >> Microsoft .Net Remoting系列专题之三:Remoting事件处理全接触
  • Microsoft .Net Remoting系列专题之三:Remoting事件处理全接触

  • :aspxer  Դ:internet  :2007-5-15 20:46:12  ؼ:.net
  • public class FaxBusiness:MarshalByRefObject,IFaxBusiness

    {

    public static event FaxEventHandler FaxSendedEvent;

    #region

    public void SendFax(string fax)

    {

    if (FaxSendedEvent != null)

    {

    FaxSendedEvent(fax);

    }

    }

    #endregion

    public override object InitializeLifetimeService()

    {

    return null;

    }

    }

    这个远程对象中,事件的类型就是我们在公共程序集Common.dll中定义的委托类型。SendFax实现了接口IFaxBusiness中的方法。这个方法的签名和定义的委托一致,它调用了事件FaxSendedEvent。

    特殊的地方是我们定义的远程对象最好是重写MarshalByRefObject类的InitializeLifetimeService()方法。返回null值表明这个远程对象的生命周期为无限大。为什么要重写该方法呢?道理不言自明,如果生命周期不进行限制的话,一旦远程对象的生命周期结束,事件就无法激活了。

    接下来就是分别实现客户端和服务端了。服务端是一个Windows应用程序,界面如下:

    我们在加载窗体的时候,注册通道和远程对象:

    private void ServerForm_Load(object sender, System.EventArgs e)

    {

    HttpChannel channel = new HttpChannel(8080);

    ChannelServices.ReGISterChannel(channel);

    RemotingConfiguration.ReGISterWellKnownServiceType(

    typeof(FaxBusiness),"FaxBusiness.soap",WellKnownObjectMode.Singleton);

    FaxBusiness.FaxSendedEvent += new FaxEventHandler(OnFaxSended);

    }

    我们采用的是SingleTon模式,注册了一个远程对象。注意看,这段代码和一般的Remoting服务端有什么区别?对了,它多了一行注册事件的代码:

    FaxBusiness.FaxSendedEvent += new FaxEventHandler(OnFaxSended);

    这行代码,就好比我们服务端的传真机,一直切换为“自动”模式。它会一直监听着来自客户端的传真信息,一旦传真信息从客户端发过来了,则响应事件方法,即OnFaxSended方法:

    Ҷƪл˵?
  • һƪRemoting服务端和客户端程序该这样模式来写
    һƪMicrosoft .Net Remoting系列专题之一:.Net Remoting基础篇