.Net3.5 Remoting 编程入门一

 

.Net3.5 Remoting 编程入门一

 Remoting是一种分布式处理技术,类似与WebService,WCF。

那也许有人就要问了,现在.Net3.5中,比较推崇的WCF,那么为什么要学习Remoting呢?

我个人认为:

1, 项目的需要,有时候就是客户或者是决策层,就是决定要Remoting实现。

2, 作为一个典型的技术,掌握了Remoting对你的.Net方面的技术也是一种提高。

3, 掌握好Remoting,对后续学习WCF是有一定的帮助的。

4,再你下次换工作,面试官问你Remoting技术方面的时候,不至于成“哑巴”。

。。。。。

所以,我觉得学习Remoting还是很有必要的。

那么如果开发一个Remoting程序,

实现Remoting程序只需要以下三个步骤:

1, 编写可远程处理的类型。

2, 编写服务器端程序

3, 编写客户端程序

 

用一个例来说明开发Remoting应用程序的基本过程。

在本文以及后续的文章,我们的开发环境是VS2008 SP1,语言是C#3.0

这个例子是个简单例子,

其主要实现的功能是:客户端程序每个2s发送一次消息,服务端接受到客户端的消息,将消息显示出来。

 

接下来,做第一步:编写可远程处理的类型。

首先,我们要记住一点:远程处理的类型,必须继承MarshalByRefObject

接下来,开始编写需要远程处理的类(Message.cs

using System;

namespace RemotingClass

{

    public class Message : MarshalByRefObject

    {

        public delegate void MessageHandler(string msg);

        public static event MessageHandler OnSendMessage;

        public void SendMessage(string msg) //发送消息

        {

            if (OnSendMessage != null)

                OnSendMessage(msg);

        }

    }

}

 

 

第二步,编写服务端程序

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Runtime.Remoting;

using System.Runtime.Remoting.Channels;

using System.Runtime.Remoting.Channels.Http;

 

namespace Server

{

    class Program

    {

        static void Main(string[] args)

        {

            Console.WriteLine("Host Started!");

            HttpChannel channel = new HttpChannel(20001);//定义个通道并指定端口

            ChannelServices.RegisterChannel(channel,false);//服务端注册通道

            RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemotingClass.Message), "Message", WellKnownObjectMode.Singleton);//服务端注册类型,并使用Singletong激活方式

            RemotingClass.Message.OnSendMessage += new RemotingClass.Message.MessageHandler(Message_OnSendMessage);//订阅事件

            Console.Read();

        }

        public static void Message_OnSendMessage(string msg) //

        {

            Console.WriteLine(msg);

        }

    }

}

 

 

第三步,编写客户端程序,

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Runtime.Remoting;

using System.Runtime.Remoting.Channels;

using System.Runtime.Remoting.Channels.Http;

namespace Client

{

    class Program

    {

        static void Main(string[] args)

        {

            Console.WriteLine("Client Started!");

            HttpChannel channel = new HttpChannel();//客户端不需要指定端口

            ChannelServices.RegisterChannel(channel, false); //注册通道

            RemotingConfiguration.RegisterWellKnownClientType(typeof(RemotingClass.Message), "http://localhost:20001/Message"); //注册远程处理的类型

            RemotingClass.Message msg = new RemotingClass.Message();

            while (true) //每隔2s,发送一次消息。

            {

                msg.SendMessage("Client time is:" + System.DateTime.Now.ToString()); //发送消息

                System.Threading.Thread.Sleep(2000);//

            }

            //Console.ReadLine();

        }

 

    }

}

然后,编译程序。先启动服务端,在启动客户端。我们可以看到,服务端不断在显示客户端发送来的消息。

 

 

至此,一个简单的Remoting程序完成。

 

今天就暂时写这么多了。在下一篇中,我们一起学习:客户端与服务端激活方式。 

 

posted @ 2008-11-09 17:11  ♂风车车  阅读(1560)  评论(0编辑  收藏  举报