.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程序完成。
今天就暂时写这么多了。在下一篇中,我们一起学习:客户端与服务端激活方式。