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

 

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

转载于:https://www.cnblogs.com/abenmao/archive/2012/10/11/2720197.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值