一 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。
伺服器啟用的對象有兩種啟用模式:Singleton 和 SingleCall.
1) Singleton(單一實例):
這些對象遵循傳統的Singleton 設計模式,在這種模式中,任何時候記憶體中都只有一個執行個體,所有用戶端都接受該執行個體提供的服務。
特點:
a.在伺服器段只執行個體化一次,以後每次調用都訪問同一個執行個體。
b.可以維持狀態
2) SingleCall(單調用)
SingleCall 遠程伺服器類型總是為每個用戶端請求設定一個執行個體。下一個方法調用將改由其他執行個體進行服務。從設計角度看,SingleCall 類型提供的功能非常簡單。這種機制不提供狀態管理,如果您需要狀態管理,這將是一個不利之處;如果您不需要,這種機制將非常理想。也許您只關心Server Load Balancer和延展性而不關心狀態,那麼在這種情況下,這種模式將是您理想的選擇,因為對於每個請求都只有一個執行個體。如果願意,開發人員可以向 SingleCall 對象提供自己的狀態管理,但這種狀態資料不會駐留在對象中,因為每次調用新的方法時都將執行個體化一個新的對象標識。
特點:
a.每次調用都執行個體化新的執行個體
b.更好地支援無狀態編程模型
2 用戶端啟用
“用戶端啟用的對象”是當用戶端調用 new 或 Activator.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高。