zoukankan      html  css  js  c++  java
  • .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问题,也为我们对待参数

    的传递多了几种认识。

  • 相关阅读:
    AVLTree的实现以及左右旋转维持自平衡
    哈希函数之布隆过滤器
    LeetCode——线段树解决区间总和问题
    第23章 Windows身份验证
    第22章 使用外部身份提供商登录
    第21章 登录
    第20章 定义客户端
    第19章 定义资源
    第18章 启动
    第17章 社区快速入门和模板
  • 原文地址:https://www.cnblogs.com/Mayvar/p/wanghonghua20091205.html
Copyright © 2011-2022 走看看