分散式資料庫系統—商旅預定系統的實現(3)

來源:互聯網
上載者:User
文章目錄
  • 1.註冊通道
  • 2.註冊遠程對象
  • 3.用戶端處理
通訊通道的建立過程1.註冊通道

Remoting技術的通訊建立分為兩種:伺服器端啟用和用戶端啟用。本次設計採用的是伺服器端啟用模式。

       在通道的建立過程中,需要在伺服器端和用戶端分別進行處理。

伺服器端處理如下:

要跨越應用程式定義域進行通訊,必須實現通道。如前所述,Remoting提供了IChannel介面,分別包含TcpChannel和HttpChannel兩種類型的通道。這兩種類型除了效能和序列化資料的格式不同外,實現的方式完全一致,因此下面我們就以TcpChannel為例。   

     註冊TcpChannel,首先要在項目中添加引用“System.Runtime.Remoting”,然後using名字空間:System.Runtime.Remoting.Channel.Tcp。

代碼如下: 

        static void Main(string[] args)        {            #region 資料表一(Car)的伺服器啟動            TcpServerChannel chanCar = new TcpServerChannel(9999);            ChannelServices.RegisterChannel(chanCar, false);            Console.WriteLine(chanCar.ChannelName);            RemotingConfiguration.RegisterWellKnownServiceType                 (typeof(CarRemoteServiceImpl), "Service", WellKnownObjectMode.Singleton);            Console.WriteLine("資料表一(Car)的伺服器啟動...");            #endregion            Console.WriteLine("Press <Enter> to Exit...");            Console.ReadLine();        }

 

       在執行個體化通道對象時,將連接埠號碼作為參數傳遞。然後再調用靜態方法RegisterChannel()來註冊該通道對象即可。 

2.註冊遠程對象

      註冊了通道後,要能啟用遠程對象,必須在通道中註冊該對象。根據啟用模式的不同,註冊對象的方法也不同。   

   (1)SingleTon模式   

   對於WellKnown對象,可以通過靜態方法RemotingConfiguration.RegisterWellKnownServiceType()來實現:

RemotingConfiguration.RegisterWellKnownServiceType

(typeof(ServerRemoteObject.ServerObject),"ServiceMessage",WellKnownObjectMode.SingleTon);   

  (2)SingleCall模式   

  註冊對象的方法基本上和SingleTon模式相同,只需要將枚舉參數WellKnownObjectMode改為SingleCall就可以了。

RemotingConfiguration.RegisterWellKnownServiceType

(typeof(ServerRemoteObject.ServerObject),"ServiceMessage",WellKnownObjectMode.SingleCall); 

3.用戶端處理

        用戶端主要做兩件事,一是註冊通道。Remoting中伺服器端和用戶端都必須通過通道來傳遞訊息,以獲得遠程對象。第二步則是獲得該遠程對象。   

註冊通道:  

        //初始化全域變數        TcpClientChannel chan;        //分伺服器聲明        IHotelRemoteService hotelRemoteService;        ICarRemoteService carRemoteService;        IFlightRemoteService flightRemoteService;        ICustomerRemoteService customerRemoteService;        IReservationRemoteService reservationRemoteService;

 

 chan = new TcpClientChannel();            ChannelServices.RegisterChannel(chan, false);            #region 執行個體化遠程對象            hotelRemoteService = (IHotelRemoteService)Activator.GetObject                (typeof(IHotelRemoteService), "tcp://localhost:9998/Service", null);            carRemoteService = (ICarRemoteService)Activator.GetObject                (typeof(ICarRemoteService), "tcp://localhost:9999/Service", null);            customerRemoteService = (ICustomerRemoteService)Activator.GetObject                (typeof(ICustomerRemoteService), "tcp://localhost:9997/Service", null);            flightRemoteService = (IFlightRemoteService)Activator.GetObject                (typeof(IFlightRemoteService), "tcp://localhost:9996/Service", null);            reservationRemoteService = (IReservationRemoteService)Activator.GetObject                (typeof(IReservationRemoteService), "tcp://localhost:9995/Service", null);            #endregion

        注意在用戶端執行個體化通道時,是調用的預設建構函式,即沒有傳遞連接埠號碼。事實上,這個連接埠號碼是缺一不可的,只不過它的指定被放在後面作為了Uri的一部分。    

獲得遠程對象。   

         與伺服器端相同,不同的啟用模式決定了用戶端的實現方式也將不同。不過這個區別僅僅是WellKnown啟用模式和用戶端啟用模式之間的區別,而對於SingleTon和SingleCall模式,用戶端的實現完全相同。   

WellKnown啟用模式   

要獲得伺服器端的知名遠程對象,可通過Activator進程的GetObject()方法來獲得:   

ServerRemoteObject.ServerObject serverObj = (ServerRemoteObject.ServerObject)

Activator.GetObject(   typeof

(ServerRemoteObject.ServerObject), "tcp://localhost:8080/ServiceMessage");   

        首先以WellKnown模式啟用,用戶端獲得對象的方法是使用GetObject()。其中參數第一個是遠程對象的類型。第二個參數就是伺服器端的uri。如果是http通道,自然是用了。因為我是用本地機,所以這裡是localhost,你可以用具體的伺服器IP地址來代替它。連接埠必須和伺服器端的連接埠一致。後面則是伺服器定義的遠程物件服務名,即ApplicationName屬性的內容。

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.