.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,  前者:远程对象的一个实例处理所有的客户请求。后者:

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

 

 

posted on 2009-12-03 22:07  Mayvar  阅读(589)  评论(0编辑  收藏  举报

导航