• .NET Remoting 经典远程回调模型(三)


             今天来说下最后一项技术,用接口来代替定制委托。

             前面讲过,定制委托时客户端传递一个实现好了的委托给服务端,

    同样的道理,客户端也可传递一个实现好了接口给服务端。

    看一下如何实现:

     //定义回调接口

    public interface IClientCallback

    {

    //为了防止服务端因为阻塞而不能及时返回结果而影响

    //本地执行其他任务,因此加上ONEWAY属性。

          [OneWay]

          void ResultCallback(int result);

    }

    public class SimpleMath:MarshalByRefObject

    {

         private delegate int opDelegate(int n1, int n2);

         public delegate void ClientCallbackDelegate(int result);

         public int Add(int n1, int n2)

       {

            return n1+n2;

        }

         public void AsyncAdd(int n1,int n2,IClientCallback callback)

        {

              opDelegate op=  new opDelegate(Add);

               op.BeginInvoke(n1,n2,new AsycCallback(DoClientCallback),callback);

          }

         private void DoClientCallback(IAsyncResult ar)

         {

              AsyncResult asyncResult=(AsyncResult)ar;

              opDelegate  op= (opDelegate)asyncResult.AsyncDelegate;

             int result=op.EndInvoke(ar);

             ////// 注意下面的变动,用接口来替代委托的

             /////把从客户端获得的对象转成相对应得接口对象

             IClientCallback callback=(IClientCallback )ar.AsyncState;

             callback.ResultCallback(result);

          }

    }

    再看一下客户端:

    我们先做一个实现 回调接口的类,这个类的实例

    就是准备传输给服务端的。

    //记得客户端和服务端都得引用回调接口所处的应用程序集DLL

    pubic class ClientCallbackSink:MarshalByRefObject,IClientCallback 

    {

         public void ResultCallback(int result)

        {

              Console.WriteLine(result.tostring());

         }

    }

    class ClientMain

    {

         static void Main(string[] args)

         {

                RemotingConfguration.Configure("MathClient.exe.config");

               SimpleMath math= new SimpleMath();

               ClientCallbackSink callback= new ClientCallbackSink ();

               math.AsyncAdd(5,2,callbakc);

          }

    }

    好了,Remoting的基本回调技术就讲完了,其实,我们

    也可看到,这不仅仅是Remoting问题,也为我们对待参数

    的传递多了几种认识。

  • 相关阅读:
    contextMenu,右键菜单
    hashchange
    web攻击日志分析之新手指南
    工匠人生
    数学有卵用之通信篇
    精英主义(一)
    flaskbb部署笔记
    深入分析一波,你们说的云安全到底是什么鬼?
    Gh0st与云安全
    困境与突破
  • 原文地址:https://www.cnblogs.com/Mayvar/p/wanghonghua20091205.html
Copyright © 2020-2023  润新知