zoukankan      html  css  js  c++  java
  • .NET Remoting 经典远程回调模型(一)

               多层分布式应用开发是老生常谈的话题,其大大小小的框架也不计其数。

               记得以前第一次开发分布式应用程序时候,还是用COM,那家伙,难的咧。。。!!

    还是借助delphi,光说配置成功都花了我好几个星期(实话),到处找资料,

    请教高手....结果算是实现了多台机器的分布式应用了,但很不灵活,每重

    配置一次,难受一次!!

               在.NET Remoting, WCF 大行其道的今天,一切问题迎刃而解!

               这里就说说我在实际工作用到的一点东西,与大家共同学习,一起进步!

    .NET Remoting 的一些基础问题我就不讲了,只说说.NET Remoting 中

    的经典回调机制:

    1, 使用 AsyncCallback. 这是较为简单的技术,但是却增加了客户代码的

    负担,有一个好处是不需要部署特定的元数据。

    2,向服务器传递定制委托。这项技术需要服务端一些特别支持,但是将客户端

    责任最小化了,然而,却使元数据部署复杂化。

    3, 向服务端传递一个回调接口,需要服务器特别支持,它也可讲客户端的

    责任最小化,且不需要部署任何额外的元数据。

    A,  使用AsyncCallback.

    直接看代码更直观:

    class ClientMain

    {

         delegate int opDelegate(int n1,int n2)

          static void Main(string[] args)

         {

               simpleMath math = (simpleMath)Activator.GetObject(typeof(simpleMath),"http://localhost:6666/MyURI.soap");

               opDelegate op=math.Add ;// (也可 new opDelegate(math.Add))

               IAsyncResult asyncResult = op.BeginInoke(5,2,new AsyncCallback(AddCallback),"回调完成");

           }

         static void AddCallback(IAsyncResult ar)

        {

               AsysResult asysResult =(AsysResult)ar;

               opDelegate op=(opDelegate)asysResult.AsyncDelegate;

                int result = op.EndInvoke(ar);

                Console.WriteLine(result.tostring());   

    }

    }

    服务端:

    public class SimpleMath: MarshalByRefObject

    {

        public SimpleMath()

       {}

       public int Add(int n1,int n2)

       {

              return n1+n2;

        }

    }

    static void Main(string[] args)

    {

          ChannelServices.RegisterChannel(new HttpChannel(6666));

          RemotingConfiguration.RegisterWellKnownServiceType(typeof(SimpleMath),"MyURI.soap",WellKnownObjectMode.Singleton);

    }

    这里,我们使用的是HTTP,当然也可用其他的,如TCP

    还啰嗦下 singleton / singlecall,  前者:远程对象的一个实例处理所有的客户请求。后者:

    每个客户请求分配一个新实例,并在请求返回后释放这个实例。

  • 相关阅读:
    asp.net的尖括号绑定字段总结
    在 ASP.NET 中实现不同角色的用户使用不同登录界面的方法
    同一个页面内根据分类查询
    利用修改AccessDataSource的sql语句来检索数据
    ADO.NET站内模糊搜索
    又是一个新阶段
    完成一个测试的小功能实践题
    苦心志,劳筋骨,饿体肤,乏其身,乱其所为
    毕业设计进入收尾阶段
    两种模糊过滤关键字的方法
  • 原文地址:https://www.cnblogs.com/Mayvar/p/wanghonghua20091202.html
Copyright © 2011-2022 走看看