複製鏈接
請複製以下鏈接發送給好友

.NET Remoting

鎖定
.Net Remoting提供了一種允許一個應用域中的對象與另一個應用域中的對象進行交互的框架。是.NET框架中的一個重要技術改進,它用於減輕運行應用程序的系統開銷.
中文名
.Net Remoting
作    用
減輕運行應用程序的系統開銷

.NET Remoting介紹

從結構上看,.NETRemoting對象非常適合通過網絡訪問資源,而又無需處理由基於SOAP的Web Service所帶來的難題。對於內部網應用程序而言,Web服務器和SOAP協議的使用並不是總有效的。當傳輸的數據的量很大時, DCOM協議系統開銷就太大了。在過去開發人員通常使用DCOM編寫程序。有了DCOM,我們習慣於調用均等在服務器上的對象的方法,.Net Remoting就是DCOM的替代者。與DCOM相比,.Net Remo-ting也可以在Internet解決方案中。在Internet解決方案中,DCOM顯得不太靈活和效率不高。.Net Remoting.不需要創建存根程序和骨架文件,使用起來比Java的RMI簡單而且為處理局域網甚至互聯網範圍內的資源提供了一個絕佳的方法,使用範圍比JAVA的RMI更廣泛。使用.Net Remoting框架技術可以匹配和擴展體系結構的每一個部分,不僅增加了它的靈活性,也大大擴展了它的應用範圍。.NET Remoting幾乎適合於所有涉及遠程的工作 [1] 

.NET Remoting.NET Remoting的原理

.NET Remoting1.NET Remoting的體系結構

NETRemoting的體系結構如圖1所示。
圖1 圖1
在圖1的客户端應用程序域和服務端應用程序域的分界線構成了 .NET Remoting 的邊界。在服務端即服務端應用程序域由傳輸通道,序列化格式程序和Server Object組成(運行在服務器上的對象稱為遠程對象)。在客户端即客户應用程序域如圖1所示由Client Object、代理、傳輸通道、序列化格式程序組成。下面分述幾個重要的概念。
(1)應用程序域 可以將應用程序域看作是一個邏輯進程。在傳統意義上,進程通常被用作隔離的分界線,也就是説,在一進程中運行的應用程序不能訪問和破壞另一個進程,應用域就成為進程中新的安全分界線。
(2)客户代理 客户代理分為透明代理和真實代理。其中,透明代理是遠程對象的精確副本,它具有遠程對象所具有的可用的方法調用,它截取了所有對遠程對象的直接方法調用,並將它們傳遞給真實代理。真實代理是具體的處理,它接受透明代理創建的消息並將其發送到.NET Remoting基礎設施用於最終傳遞給遠程對象。
圖2 圖2
(3)傳輸通道 .NET Remoting通過通道穿越.NET Remoting邊界傳輸序列化的消息對象,它由格式化接收器、通道接收器、傳輸接收器組成。其內部結構如圖2所示。
常用的是TCP通道和HTTP通道。TCP通道主要用Internet,HTTP通道主要可以和SOAP協議結合用於Internet,可以穿越防火牆。並且還可以根據需要定製通道,如安全加密通道。
(4)對象激活 對象激活分為服務器端激活和客户端激活。服務器端激活分為Singleton和SingleCall模式。 .NET Remoting將服務器端激活類型稱為眾所周知的對象類型,服務器在應用程序激活對象實例之前會在一個眾所周知的統一資源標識符(URI)上發佈這個類型。在處理客户端激活時,與處理服務器端激活類型相比,.NET Remoting基礎設施激活每個對象實例的時候會給每個客户端激活的類型指派一個URI。

.NET Remoting2..NET Remoting的擴展

.NET Remoting具有良好的擴展性,可以根據需要替代真實代理對象、添加接收器對象、替代格式標識符和通道等。介紹通道的定製,具體如下:
(1)創建客户端通道類 客户端通道由三個分別繼承IchannelSender,IclientChannelSinkPvovider,IchannelSink的類構成。Public class SDC ClientChannel:IchannelSender{...},…
(2)創建服務器端通道類 服務器端包含兩個類,它們分別繼承IchannelReceiver和IserverChannelSink Public class SDC ServerChannel:IchannelReceive{...},…
(3)創建名為SDC的類 此類存放服務器和客户端通道所共享的功能。
(4)創建結合了服務器端和客户端類 兩者功能的主通道類:Public class SDC Channel: Ichannel, IchannelReceiver{...}, …

.NET Remoting.NET Remoting的分佈式應用

在眾多的分佈式體系應用中,Peer-to-Peer(簡稱P2P)是近來研究的熱點。在這種模型下,每個客户端同時也是一個服務器。此模型與C/S模型主要區別是:應用程序配置Remoting以偵聽客户端請求,並通過Remoting來調用類。在大多數P2P應用程序中,給定的對等端同時連接到多個其他的對等端。這就意味着不能使用Remoting靜態配置。為此,我們將不在Remoting中註冊遠程類,而是使用.NETFramework中的一種特殊方法來創建遠程對象即Activator. GetObject,它接受兩個參數:第一個是要創建的對象類型;第二個是要在其上創建對象的Remoting主機的URL。編碼如下:
RemotingConfiguration.ApplicationName=″Peer APP″
 ∥設置應用程序名稱
 mChannel= NewTcpChannel(CInt(Port.Text))∥創建通道
 ChannelServices.RegisterChannel(mChannel)
 RemotingConfiguration. RegisterWellKnownServiceType(GetType(Listener),″Listener″, WellKnownObjectMode.SingleCall)∥註冊遠程對象
 這樣其他的對等端就可以通過Remoting來使用Listener類,當對等端在偵聽時,其他對等端就可以連接到它並與Listener對象進行交互:
 Dim listener As Listener
 … …
 listener= Activator.GetObject(GetType(Listener),url.ToString)
 … …
參考資料