Remoting的基本概念

一 Remoting技術出現的背景

1)分佈式應用需求的迅速增長(Peer-to-Peer, Grid等技術的出現)
2)原有的C/S, B/S模式和技術已經不能勝任(串口RS232,Socket,RPC,DCOM技術各有缺點)


二 什麼是
Romoting?

採用分佈式進行編程的一種技術,Remoting主要用於管理跨應用程序域的同步和異步RPC 會話。在默認情況下,Remoting使用 HTTP 或 TCP 協議,並使用 XML 編碼的 SOAP 或本機二進制消息格式進行通信。.NET Remoting 提供了非常靈活和可擴展的編程框架,並且他可以管理對象的狀態。

Remoting優點:
1)  性能: 如果調優.Net Remoting 的性能,那麼他的性能非常好,速度接近DCOM.
2) 可擴展:.Net Remoting 可供你選擇傳輸通道類型(如Http,Tcp)和格式類型(如Binary,Soap)。
3) 可配置:可以通過配置文件配置應用程序。
4) CLR和CTS的好處:由於.NET Remoting是基於.NET框架的,所以他擁有Common Type System(CTS) 和 Common Language Runtime(CLR)所擁有的易於使用和功能強大的特點。
5)互用性(Interoperability): .NET Remoting 支持開發標準(Http,SOAP,WSDL,XML).
6) 安全性
7) 生命週期管理


三 Remoting架構:

Remoting通過通道(channel)來傳輸消息。.NET Remoting支持兩種默認的協議支持通道(Http和Tcp).


四 遠程對象的兩個含義

操作遠程對象:對象運行在遠程,客戶端向他發送消息.
傳遞遠程對象:將遠程的對象拿到本地,或者將本地對象發送過去,然後我們可以對副本進行操作.


五 激活對象的兩種方式:
服務器激活和客戶端激活

1 服務器激活:
“服務器激活的對象”是由服務器控制生存期的對象。它們只在客戶端調用對象的第一個方法時,根據需要由服務器創建。服務器激活的對象只支持默認的構造函數。
代碼:

<service>
 
<wellknown mode="SingleCall" type="Hello.HelloService, Hello"
                   objectUri
="HelloService.soap" />
</service>

上面描述了一個服務器激活的 (wellknown) 類型,其激活方式設置爲 SingleCall

服務器激活的對象有兩種激活模式:SingletonSingleCall.
1) Singleton(單實例):
這些對象遵循傳統的Singleton 設計模式,在這種模式中,任何時候內存中都只有一個實例,所有客戶端都接受該實例提供的服務。
特點:
a.在服務器段只實例化一次,以後每次調用都訪問同一個實例。
b.可以維持狀態

2) SingleCall(單調用)
SingleCall 遠程服務器類型總是爲每個客戶端請求設置一個實例。下一個方法調用將改由其他實例進行服務。從設計角度看,SingleCall 類型提供的功能非常簡單。這種機制不提供狀態管理,如果您需要狀態管理,這將是一個不利之處;如果您不需要,這種機制將非常理想。也許您只關心負載平衡和可伸縮性而不關心狀態,那麼在這種情況下,這種模式將是您理想的選擇,因爲對於每個請求都只有一個實例。如果願意,開發人員可以向 SingleCall 對象提供自己的狀態管理,但這種狀態數據不會駐留在對象中,因爲每次調用新的方法時都將實例化一個新的對象標識。
特點:
a.每次調用都實例化新的實例
b.更好地支持無狀態編程模型

2 客戶端激活
“客戶端激活的對象”是當客戶端調用 newActivator.CreateInstance() 時在服務器上創建的。
代碼:

<service>
 
<activated type="Hello.HelloService, Hello"
             objectUri
="HelloService.soap" />
</service>

上面描述了一個客戶端激活的類型。請注意,我們不再需要 URL,因爲對於客戶端激活的類型,類型本身就足以激活了。另外,wellknown 標記已被 activated 標記替代。

六 Remoting VS Web Service

這兩者都是基於分佈式的開發,而且.Net Remoting有時也可以配置爲Web Service,兩者有很多的相同之處。

一般來講,我把他們的不同之處列爲5個方面。

1) 開發部署
 WebService開發和部署比較簡單,Remoting相對WebService開發和部署要稍複雜。
2) 協議的開放性 
    兩者都可支持HTTP,TCP,SMTP等多種協議。
    [一直以爲WebService只支持HTTP協議,經idior指點,原來在Web Services Enhancements已有介紹,WebService也支持TCP,SMTP等協議。微軟最新發布的wse應該是wse 3.0,以前還沒聽說過,真是汗顏!]
   更詳細的內容待續...
3) 支持的類型系統
 WebService只支持XSD類型系統,對象的類型的序列化受到限制,而Remoting可以通過序列化爲Binary傳輸數據,支持更爲廣泛的數據類型
4) 安全性
 
由於 ASP.NET Web 服務依賴於 HTTP,因此它們與標準的 Internet 安全性基礎結構相集成。ASP.NET 利用 IIS 的安全性功能,爲標準 HTTP 驗證方案(包括基本、簡要、數字證書,甚至 Microsoft .NET Passport)提供了強有力的支持。
 一般情況下,.NET Remoting 管線不能確保跨進程調用的安全。使用 ASP.NET 託管於 IIS 中的 .NET Remoting 端點可以利用 ASP.NET Web 服務可用的所有安全性功能,包括對使用 SSL 確保有線通信的安全性的支持。
5) 性能
從原始性能方面來講,使用 TCP 信道和二進制格式化程序時,.NET Remoting 管線能夠提供最快的通信。一般情況下,.NET Remoting的性能要比WebService高。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章