資料通訊之Microsoft .Net Remoting入門(2)

來源:互聯網
上載者:User
 

     上次以一個簡單例子帶我們領略了一下remoting的風采,今天我們逐步熟悉下remoting的基礎知識。

     首先remoting是以通道來串連兩個應用程式定義域之間來進行通訊的,用戶端通過remoting訪問通道以獲得伺服器端遠程對象,再通過代理解析為用戶端對象。遠程對象代碼可以運行在伺服器上(分為伺服器端啟用的對象和用戶端啟用的對象),用戶端通過remoting串連伺服器,獲得該服務物件並通過序列化在用戶端運行

   在remoting可以同時註冊多個通道的,但是必須採用不同的連接埠號碼和名稱來標示,因為名稱是通道的唯一標示符。

一 遠程對象

遠程對象啟用,分為用戶端啟用和伺服器端啟用

伺服器端啟用叫做WellKnow啟用,不過很多書翻譯成知名對象啟用方式,它在一個眾所盩厔的URI上發布這個類型,並且伺服器處理序回為此類型配置一個WellKnow對象,根據指定的地址和協議以及連接埠來發布對象。

 即  RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteTest), "proname", WellKnownObjectMode.Singleton);

 也可以是

       RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteTest), "proname", WellKnownObjectMode. SingleCall);

   SingleCall和Singleton是代表兩中不同模式,

Singleton即為狀態模式,可以理解為所有用戶端公用一個對象,當它處於啟用狀態時,它會同時處理所有用戶端請求,而並不關注是否是同一個用戶端執行個體。

   SingleCall對象即叫做無狀態模式,SingleCall是一種無狀態模式。一旦設定為SingleCall模式,則當用戶端調用遠程對象的方法時,Remoting會為每一個用戶端建立一個遠程對象執行個體,至於對象執行個體的銷毀則是由GC自動管理的。其實很象我們平時所經常見到的Session。

 用戶端啟用與WellKnown模式不同,Remoting在啟用每個對象執行個體的時候,會給它會分別指派一個URI給用戶端啟用類型,一旦獲得用戶端的請求,將為每一個用戶端都建立一個執行個體引用。另外,SingleCall和用戶端啟用物件執行個體建立的時間不一樣。用戶端啟用方式是客戶一旦發出調用的請求,就執行個體化;而SingleCall則是要等到調用對象方法時再建立。其次,SingleCall模式啟用的對象是無狀態的,對象生命期的管理是由GC管理的,而用戶端啟用的對象則有狀態,其生命週期可自訂。其三,兩種啟用模式在伺服器端和用戶端實現的方法不一樣。尤其是在用戶端,SingleCall模式是由GetObject()來啟用,它調用對象預設的建構函式。而用戶端啟用模式,則通過CreateInstance()來啟用,它可以傳遞參數,所以可以調用自訂的建構函式來建立執行個體。

對於用戶端啟用模式有兩種方法:

1) 調用RemotingConfiguration的靜態方法RegisterActivatedClientType()。這個方法傳回值為Void,它只是將遠程對象註冊在用戶端而已。具體的執行個體化還需要調用對象類的建構函式。
 RemotingConfiguration.RegisterActivatedClientType(               
                typeof(RemoteTest),  "tcp://192.168.168.165:8081/proname ");
 RemoteTest serverObj = new RemoteTest();

2) 調用進程Activator的CreateInstance()方法。這個方法將建立方法參數指定類型的類對象。它與前面的GetObject()不同的是,它要在用戶端調用建構函式,而GetObject()只是獲得對象,而建立執行個體是在伺服器端完成的。CreateInstance()方法有很多個重載,我著重說一下其中常用的幾個。
《1》 public static object CreateInstance(Type type, object[] args, object[] activationAttributes);

Args[]傳遞的其實就是構造方法的參數

《2》public static ObjectHandle CreateInstance(string assemblyName, string typeName, object[] activationAttribute);

《3》 public static ObjectHandle CreateInstance(Type type);

《4》 public static ObjectHandle CreateInstance(Type type,bool nonPulic);

      其實在日常使用中,以上只是帶領大家瞭解了下remoting基礎知識,在實際應用中,如果傳遞自訂對象,與中繼資料的相關性,介面知識的融合,都需要我們好好的融會貫通。

     偶希望“我丟出一塊磚頭,有玉的砸過來吧!”

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.