天天看點

.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