国产美女一级毛片精品久久久|婷婷影院在线综合免费视频|最新国产午夜精品视频成人|久久精品九九无码免费

淺析.Net Remoting框架的基本原理

來源:北大青鳥飛迅校區(qū)|發(fā)布時(shí)間:2013-04-29 09:45:35

    傳統(tǒng)的方法調(diào)用是通過棧實(shí)現(xiàn),調(diào)用方法前將this指針以及方法參數(shù)壓入線程棧中,線程執(zhí)行方法時(shí)將棧中的參數(shù)取出作為本地變量,經(jīng)過一番計(jì)算后,將方法的返回結(jié)果壓入棧中。這樣我們就完成了一次方法調(diào)用。如下圖所示:

1.jpg

  基于棧的方法調(diào)用在同一個(gè)應(yīng)用程序中很容易實(shí)現(xiàn),但是如果要調(diào)用的方法所屬的對(duì)象位于另一個(gè)應(yīng)用程序域或另一個(gè)進(jìn)程甚至是另一個(gè)機(jī)器,又當(dāng)如何?應(yīng)用程序域之間是無法共享同一個(gè)線程棧的,此時(shí)我們將轉(zhuǎn)而使用另一種方法調(diào)用機(jī)制——基于消息的方法調(diào)用機(jī)制。在客戶端通過代理對(duì)象將原先基于棧的方法調(diào)用信息(定位遠(yuǎn)程對(duì)象的信息、方法名、方法參數(shù)等)封裝到一個(gè)消息對(duì)象中,再根據(jù)需要將這些消息對(duì)象轉(zhuǎn)化成某個(gè)格式的數(shù)據(jù)流發(fā)送到遠(yuǎn)程對(duì)象所在的的應(yīng)用程序域中。

  當(dāng)經(jīng)過格式化的消息到達(dá)服務(wù)器后,首先從中還原出消息對(duì)象,之后在遠(yuǎn)程對(duì)象所在的的應(yīng)用程序域中構(gòu)建出相應(yīng)方法調(diào)用棧,此時(shí)就可以按照傳統(tǒng)的基于棧的方法調(diào)用機(jī)制完成方法的調(diào)用,而方法返回結(jié)果的過程則按照之前的方法反向重復(fù)一遍。如下圖所示:

2.jpg

  在基于消息的遠(yuǎn)程方法調(diào)用中主要有以下幾個(gè)重要角色:

  Client Proxy: 負(fù)責(zé)在客戶端處理基于棧的參數(shù)傳遞模式和基于消息的參數(shù)傳遞模式之間的轉(zhuǎn)換。

  Invoker:與Client Proxy的功能相反。

  Requestor: 負(fù)責(zé)將消息對(duì)象轉(zhuǎn)換成可在網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)流,并將其發(fā)送到服務(wù)器。

  Marshaller: 負(fù)責(zé)消息對(duì)象的序列化與反序列化。

  Client Request Handle:負(fù)責(zé)以數(shù)據(jù)流的格式發(fā)送客戶端的請(qǐng)求消息。

  Server Request Handel:負(fù)責(zé)接收來自客戶端的請(qǐng)求消息。

  那么在.NET Remoting框架下,這些重要角色又各自對(duì)應(yīng)了哪些對(duì)象呢?下圖是一個(gè)Remoting框架的示意圖:

3.jpg

從中我們可以看到客戶端的Transparent Proxy與服務(wù)器端的StackBuilderSink分別扮演了Client Proxy與Invoker的角色。Remoting依靠這兩個(gè)對(duì)象實(shí)現(xiàn)了基于棧的方法調(diào)用與基于消息的方法調(diào)用的轉(zhuǎn)換,并且這一過程對(duì)于開發(fā)者是完全隱藏的。

上一篇:Microsoft .NET Services是什么?
下一篇:ASP.NET MVC 2 RC發(fā)布及下載地址

熱門話題

招生熱線: 4008-0731-86 / 0731-82186801

學(xué)校地址: 長沙市天心區(qū)團(tuán)結(jié)路6號(hào)

Copyright © 2006 | 湖南大計(jì)信息科技有限公司 版權(quán)所有

湘ICP備14017520號(hào)-3

關(guān)注我們
在線咨詢
嘿,我來幫您!