資源描述:
《Remoting技術(shù)講座》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫(kù)。
1、Microsoft.NetRemoting系列專(zhuān)題之一一、Remoting基礎(chǔ)什么是Remoting,簡(jiǎn)而言之,我們可以將其看作是一種分布式處理方式。從微軟的產(chǎn)品角度來(lái)看,可以說(shuō)Remoting就是DCOM的一種升級(jí),它改善了很多功能,并極好的融合到.Net平臺(tái)下。Microsoft?.NETRemoting提供了一種允許對(duì)象通過(guò)應(yīng)用程序域與另一對(duì)象進(jìn)行交互的框架。這也正是我們使用Remoting的原因。為什么呢?在Windows操作系統(tǒng)中,是將應(yīng)用程序分離為單獨(dú)的進(jìn)程。這個(gè)進(jìn)程形成了應(yīng)用程序代碼和數(shù)據(jù)周?chē)囊坏肋吔?。如果不采用進(jìn)程間通信(RPC
2、)機(jī)制,則在一個(gè)進(jìn)程中執(zhí)行的代碼就不能訪(fǎng)問(wèn)另一進(jìn)程。這是一種操作系統(tǒng)對(duì)應(yīng)用程序的保護(hù)機(jī)制。然而在某些情況下,我們需要跨過(guò)應(yīng)用程序域,與另外的應(yīng)用程序域進(jìn)行通信,即穿越邊界。在Remoting中是通過(guò)通道(channel)來(lái)實(shí)現(xiàn)兩個(gè)應(yīng)用程序域之間對(duì)象的通信的。如圖所示:96首先,客戶(hù)端通過(guò)Remoting,訪(fǎng)問(wèn)通道以獲得服務(wù)端對(duì)象,再通過(guò)代理解析為客戶(hù)端對(duì)象。這就提供一種可能性,即以服務(wù)的方式來(lái)發(fā)布服務(wù)器對(duì)象。遠(yuǎn)程對(duì)象代碼可以運(yùn)行在服務(wù)器上(如服務(wù)器激活的對(duì)象和客戶(hù)端激活的對(duì)象),然后客戶(hù)端再通過(guò)Remoting連接服務(wù)器,獲得該服務(wù)對(duì)象并通過(guò)序列
3、化在客戶(hù)端運(yùn)行。在Remoting中,對(duì)于要傳遞的對(duì)象,設(shè)計(jì)者除了需要了解通道的類(lèi)型和端口號(hào)之外,無(wú)需再了解數(shù)據(jù)包的格式。但必須注意的是,客戶(hù)端在獲取服務(wù)器端對(duì)象時(shí),并不是獲得實(shí)際的服務(wù)端對(duì)象,而是獲得它的引用。這既保證了客戶(hù)端和服務(wù)器端有關(guān)對(duì)象的松散耦合,同時(shí)也優(yōu)化了通信的性能。1、Remoting的兩種通道96Remoting的通道主要有兩種:Tcp和Http。在.Net中,System.Runtime.Remoting.Channel中定義了IChannel接口。IChannel接口包括了TcpChannel通道類(lèi)型和Http通道類(lèi)型。它們
4、分別對(duì)應(yīng)Remoting通道的這兩種類(lèi)型。TcpChannel類(lèi)型放在名字空間System.Runtime.Remoting.Channel.Tcp中。Tcp通道提供了基于Socket的傳輸工具,使用Tcp協(xié)議來(lái)跨越Remoting邊界傳輸序列化的消息流。TcpChannel類(lèi)型默認(rèn)使用二進(jìn)制格式序列化消息對(duì)象,因此它具有更高的傳輸性能。HttpChannel類(lèi)型放在名字空間System.Runtime.Remoting.Channel.Http中。它提供了一種使用Http協(xié)議,使其能在Internet上穿越防火墻傳輸序列化消息流。默認(rèn)情況下,H
5、ttpChannel類(lèi)型使用Soap格式序列化消息對(duì)象,因此它具有更好的互操作性。通常在局域網(wǎng)內(nèi),我們更多地使用TcpChannel;如果要穿越防火墻,則使用HttpChannel。2、遠(yuǎn)程對(duì)象的激活方式在訪(fǎng)問(wèn)遠(yuǎn)程類(lèi)型的一個(gè)對(duì)象實(shí)例之前,必須通過(guò)一個(gè)名為Activation的進(jìn)程創(chuàng)建它并進(jìn)行初始化。這種客戶(hù)端通過(guò)通道來(lái)創(chuàng)建遠(yuǎn)程對(duì)象,稱(chēng)為對(duì)象的激活。在Remoting中,遠(yuǎn)程對(duì)象的激活分為兩大類(lèi):服務(wù)器端激活和客戶(hù)端激活。(1)96服務(wù)器端激活,又叫做WellKnow方式,很多又翻譯為知名對(duì)象。為什么稱(chēng)為知名對(duì)象激活模式呢?是因?yàn)榉?wù)器應(yīng)用程序在激
6、活對(duì)象實(shí)例之前會(huì)在一個(gè)眾所周知的統(tǒng)一資源標(biāo)識(shí)符(URI)上來(lái)發(fā)布這個(gè)類(lèi)型。然后該服務(wù)器進(jìn)程會(huì)為此類(lèi)型配置一個(gè)WellKnown對(duì)象,并根據(jù)指定的端口或地址來(lái)發(fā)布對(duì)象。.NetRemoting把服務(wù)器端激活又分為SingleTon模式和SingleCall模式兩種。SingleTon模式:此為有狀態(tài)模式。如果設(shè)置為SingleTon激活方式,則Remoting將為所有客戶(hù)端建立同一個(gè)對(duì)象實(shí)例。當(dāng)對(duì)象處于活動(dòng)狀態(tài)時(shí),SingleTon實(shí)例會(huì)處理所有后來(lái)的客戶(hù)端訪(fǎng)問(wèn)請(qǐng)求,而不管它們是同一個(gè)客戶(hù)端,還是其他客戶(hù)端。SingleTon實(shí)例將在方法調(diào)用中一直
7、維持其狀態(tài)。舉例來(lái)說(shuō),如果一個(gè)遠(yuǎn)程對(duì)象有一個(gè)累加方法(i=0;++i),被多個(gè)客戶(hù)端(例如兩個(gè))調(diào)用。如果設(shè)置為SingleTon方式,則第一個(gè)客戶(hù)獲得值為1,第二個(gè)客戶(hù)獲得值為2,因?yàn)樗麄儷@得的對(duì)象實(shí)例是相同的。如果熟悉Asp.Net的狀態(tài)管理,我們可以認(rèn)為它是一種Application狀態(tài)。SingleCall模式:SingleCall是一種無(wú)狀態(tài)模式。一旦設(shè)置為SingleCall模式,則當(dāng)客戶(hù)端調(diào)用遠(yuǎn)程對(duì)象的方法時(shí),Remoting會(huì)為每一個(gè)客戶(hù)端建立一個(gè)遠(yuǎn)程對(duì)象實(shí)例,至于對(duì)象實(shí)例的銷(xiāo)毀則是由GC自動(dòng)管理的。同上一個(gè)例子而言,則訪(fǎng)問(wèn)遠(yuǎn)程對(duì)
8、象的兩個(gè)客戶(hù)獲得的都是1。我們?nèi)匀豢梢越梃bAsp.Net的狀態(tài)管理,認(rèn)為它是一種Session狀態(tài)。(2)96客戶(hù)端激活。與WellKn