ITPub博客

首页 > Linux操作系统 > Linux操作系统 > .Net3.5 Remoting 编程入门一

.Net3.5 Remoting 编程入门一

原创 Linux操作系统 作者:iDotNetSpace 时间:2009-05-13 15:30:54 0 删除 编辑

.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程序完成。

原文地址:http://www.cnblogs.com/xray2005/archive/2008/11/09/1330125.html

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12639172/viewspace-594970/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-01-04

  • 博文量
    2376
  • 访问量
    5322060