.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