亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

簡單介紹.Net遠程方法調用研究

2019-11-18 12:00:33
字體:
來源:轉載
供稿:網友

  簡介
  
  遠程方法調用發展到現在,已經有以下幾種框架實現:DCE/RPC,CORBA,DCOM,MTS/COM+,java RMI,Java EJB,Web Services/SOAP/xml-RPC,NET Remoting,本文主要介紹了.NET遠程方法調用的原理,實現以及與微軟COM/DCOM實現的異同點。
  
  框架
  
  Microsoft .NET Remoting 提供了一種答應對象通過應用程序域與另一對象進行交互的框架。眾所周知,Web服務僅僅提供了一種簡單的輕易理解的方法來實現跨平臺,跨語言的交互,而DotNet Remoting相對于Web服務就像asp相對于CGI那樣,實現了一種質的轉變。DotNet Remoting提供了一個可擴展的框架,它可以選擇不同的傳輸機制(HTTP和TCP是內置的),不同的編碼方式(SOAP以及二進制代碼),安全設置(IIS或SSL),同時提供了多種服務,包括激活和生存期支持。
  
  遠程方法調用
  
  對于遠程方法調用來說,最直接的問題恐怕是:一個本地方法,推而廣之,一個本地對象,假如放在網絡環境中,如何傳遞這個方法的調用,返回,如何傳遞這個對象的請求。雖然對于應用開發人員來說這個并不是必不可少的事,但對于我們學習分布式操作系統來說,我想這是應該搞清楚的。我們知道,DCOM協議也被稱為對象RPC,它建立在DCE RPC協議基礎上,也就是說,在網絡傳輸這一層,它必須使用非凡的協議。另外Windows RPC 機制要求熟悉的類型和使用 IDL 工具的封送處理知識,并向開發人員公開 RPC 客戶端和服務器存根的治理。Remoting 在為 .NET 提供 RPC 時要輕易得多,而且由于使用簡單易懂的 .NET 數據類型,從而消除了早期 RPC 機制中存在的類型不匹配的情況(這是一個非常大的威脅)。配置為使用 HTTP 或 TCP 協議,并使用 XML 編碼的 SOAP 或本機二進制消息格式進行通信。開發人員可以構建自定義的協議(通道)或消息格式(格式化程序),并在需要時由 Remoting 框架使用。服務器和客戶端組件都可以選擇端口,就象可以選擇通信協議一樣。由此帶來的一個好處是,很輕易建立并運行基本的通信。
  
  下圖中描述了.Net Remoting的五要素:
  
  代理:在Client端偽裝為Remote Objects并轉發對Remote Objects的調用。
  
  Message:消息對象包含了執行Remote Methods調用的必要數據參數。
  
  Message Sink/Channel Sink:在Remote調用中,Message Sink答應定制消息處理流程,這是.Net Remoting內置的可擴展特性。
  
  Formatter:也是Message Sink,用來序列化消息,已適于網絡傳輸,如SOAP。
  
  Transport Channel:也是Message Sink,用來傳輸序列化的消息到遠程進程,如HTTP。
  
  當訪問Remote Objects時,Client端application并不處理真實對象的引用,而是僅僅調用PRoxy對象的方法。Proxy對象提供與Remote Objects相同的接口,偽裝成Remote Objects。Proxy對象自己并不執行任何方法,而是以消息對象(Message Object)的形式轉發每一個方法調用給.Net Remoting Framework。
  
  在類型支持方面,DCOM提供了一套復雜的列集和散集機制,他建立在RPC的基礎上。由于RPC被定義為DCE標準的一部分,而DCE RPC定義了所有常用的數據類型的數據表達方法,即網絡數據表示法。為了使存根(stub)代碼和代理對象能夠正確地對參數和返回結果也進行列集和散集,它們應該使用一致的數據表示法NDR,以便在不同的操作系統環境下也能夠遠程調用。
  
  This figure is from the book named Advanced .Net Remoting.
  
  反過來,我們再看看.NET Remoting 強大的類型操作,.Net Remoting 支持所有托管的類型、類、接口、枚舉、對象等,這通常被稱為“多類型保真”。這里的要害在于,假如客戶端和服務器組件都是在應用程序域中運行的 CLR 托管的對象,則數據類型的互操作是不成問題的。從根本上講,我們擁有的是一個封閉的系統,會話的兩端可以完全被理解,因此我們可以充分利用這一事實,處理好用于通信的數據類型和對象。
  
  在各種系統并存的情況下,我們需要考慮系統之間的互操作性。對于可互操作的數據類型,我們要謹慎處理。例如,Web 服務數據類型的定義要基于 XML 架構定義 (XSD) 關于數據類型的說明。任何可以使用 XSD 進行描述并可以在 SOAP 上進行互操作的類型都可以使用。但是,這也確實使得某些數據類型不能使用。
  
  代理
  
  代理對象偽裝成一個遠程對象,并且向本地提供遠程對象相同的接口??蛻舳藨贸绦蚺c處理遠程“真實”對象的應用(包括內存引用,指針,等等),都是通過代理對象實現的。代理對象當然并不自己完成方法調用,它將請求作為消息對象傳給.NET Framework。在這一方面,.Net Remoting 和DCOM思想上是一致的。當某個客戶端激活一個遠程對象時,框架將創建 TransparentProxy 類的一個本地實例(該類中包含所有類的列表與遠程對象的接口方法)。因為 TransparentProxy 類在創建時用 CLR 注冊,所以代理上的所有方法調用都被運行時截取。這時系統將檢查調用,以確定其是否為遠程對象的有效調用,以及遠程對象的實例是否與代理位于同一應用程序域中。假如對象在同一個應用程序域中,則簡單方法調用將被路由到實際對象;假如對象位于不同的應用程序域中,將通過調用堆棧中的調用參數的 Invoke 方法將其打包到 IMessage 對象并轉發到 RealProxy 類中。此類(或其內部實現)負責向遠程對象轉發消息。TransparentProxy 類和 RealProxy 類都是在遠程對象被激活后在后臺創建的,但只有 TransparentProxy 返回到客戶端。在代理對象創建時,需要引用Client端的Messag Sink Chain,Sink Chain的第一個Sink對象的引用保存在RealProxy對象的Identity屬性。如下圖所示:
  
  所以,在下面這段代碼調用new或者GetObject獲得對象后,對象obj將會指向
  
  TransparentProxy對象。
  
  HttpChannel channel = new HttpChannel();
  
  ChannelServices.RegisterChannel(channel);
  
  SomeClass obj = (SomeClass) Activator.GetObject(
  
  type of(SomeClass),
  
  "http://localhost:1234/SomeSAO.soap");
  
  消息
  
  當一次函數調用指向遠程對象的引用時,TransparentProxy創建一個MessageData對象并且將它傳給RealProxy對象的PrivateInvoke()調用,RealProxy相應地生成一個新的Message對象并且以MessageData對象為參數調用其InitFields()方法,Message將會解析MessageData對象中地指針進行相應地函數調用。當處理結束時,將會返回一個包含回應消息的IMessage對象,RealProxy將會調用它自己的HandleReturnMessage()方法,該方法檢查參數并且調用PropagateOutParameters()方法。當處理結束后RealProxy將會從它的PrivateInvoke()方法中返回,IMessage將會返回給TransparentProxy。CLR保證函數返回值與其返回格式相符,所以對于應用程序來說,它僅僅認為這是一個一般方法的調用,返回,這正是分布式的最終要求。
  
  可以看到,.NET Remoting與DCOM的底層機制已經完全不同了,DCOM的一次方法調用,需要經過列集(marshaling)和散集(unmarshaling)的處理,包括創建代理對象和轉載存根代碼等。但是可以看到.NET做為DCOM的下一代,在基本思想上和DCOM是一脈相承的。在我學習到現在的體會看來,.NET面向Web服務的RPC機制的確是一大革新,讓我們看看IMessage怎么進行傳遞的:
  
  這是一個消息穿過Transport Channel(也就是Message Sink)的實例。
  
  首先是SOAP遠程調用的HTTP請求:
  
  POST /MyRemoteObject.soap HTTP/1.1
  
  User-Agent: Mozilla/4.0+(compatible; MSIE 6.0; Windows 5.0.2195.0; MS .NET
  
  Remoting;
  
  MS .NET CLR 1.0.2914.16 )
  
  SOAPAction:
  
  "http://schemas.microsoft.com/clr/nsassem/General.BaseRemoteObject/General#
  
  setValue"
  
  Content-Type: text/xml; charset="utf-8"
  
  Content-Length: 510
  
  EXPect: 100-continue
  
  Connection: Keep-Alive
  
  Host: localhost
  
  然后是一個對于一個遠程對象setValue(int):
  
  POST /MyRemoteObject.soap HTTP/1.1
  
  User-Agent: Mozilla/4.0+(compatible; MSIE 6.0; Windows 5.0.2195.0; MS .NET
  
  Remoting;
  
  MS .NET CLR 1.0.2914.16 )
  
  SOAPAction:
  
  "http://schemas.microsoft.com/clr/nsassem/General.BaseRemoteObject/General#
  
  setValue"
  
  Content-Type: text/xml; charset="utf-8"
  
  Content-Length: 510
  
  Expect: 100-continue
  
  Connection: Keep-Alive
  
  Host: localhost
  
  <SOAP-ENV:Envelope
  
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  
  xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
  
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
  
  xmlns:i2=
  
  "http://schemas.microsoft.com/clr/nsassem/General.BaseRemoteObject/General">
  
  <SOAP-ENV:Body>
  
  <i2:setValue id="ref-1">
  
  <newval>4

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产剧情久久久久久| 亚洲成色999久久网站| 亚洲爱爱爱爱爱| 国产亚洲精品美女| 精品国产拍在线观看| 成人激情免费在线| 欧美精品久久久久a| 97av在线视频免费播放| 欧美激情亚洲视频| 欧美精品videofree1080p| 中文字幕v亚洲ⅴv天堂| 日本人成精品视频在线| 国产日韩在线看| 欧美激情一级欧美精品| 日韩精品视频在线观看免费| 欧美诱惑福利视频| 久久久久久久国产| 亚洲人成在线电影| 欧美理论电影网| 国产一区二区三区丝袜| 国产免费一区二区三区香蕉精| 国产视频亚洲视频| 欧美国产视频日韩| 欧美激情精品久久久久久| 亚洲天堂av在线播放| 亚洲国产精品嫩草影院久久| 国产日韩欧美中文| 亚洲free嫩bbb| 国内揄拍国内精品少妇国语| 欧美激情精品久久久久久久变态| 亚洲人成网7777777国产| 日韩一区二区三区xxxx| 日韩电影免费观看在线| 欧美肥婆姓交大片| 久久精品最新地址| 91av成人在线| 在线成人激情视频| 亚洲女人被黑人巨大进入al| 欧美一级淫片aaaaaaa视频| 91精品视频一区| 久久大大胆人体| 91精品国产自产在线| 欧美精品999| 日韩中文在线视频| 国产午夜精品美女视频明星a级| 久热爱精品视频线路一| 97国产真实伦对白精彩视频8| 国产丝袜视频一区| 亚洲精品中文字幕有码专区| 日韩av123| 国产丝袜一区二区三区| 亚洲欧美制服第一页| 日韩亚洲在线观看| 日韩欧美国产网站| 亚洲欧美中文日韩v在线观看| 国产免费一区视频观看免费| 国产丝袜一区二区三区| 国产精品激情av在线播放| 国产精品一区二区3区| 一本一道久久a久久精品逆3p| 亚洲精品在线不卡| 青青在线视频一区二区三区| 成人免费视频网| 日韩av片电影专区| 久久手机免费视频| 97视频免费看| 精品中文视频在线| 亚洲最新视频在线| 成年无码av片在线| 亚洲成年人在线播放| 日韩av片免费在线观看| 91免费版网站入口| 上原亚衣av一区二区三区| 97视频免费在线观看| 国产日韩av在线| 91日韩在线播放| 国产精品高清网站| 在线成人激情视频| 亚洲网站视频福利| 久久综合久久美利坚合众国| 欧美福利在线观看| 欧美色视频日本版| 国产一区二区免费| 色樱桃影院亚洲精品影院| 亚洲成av人影院在线观看| 日本三级韩国三级久久| 久久视频免费观看| 欧美性猛交xxxx富婆弯腰| 亚洲欧美激情一区| 精品magnet| 久久久亚洲网站| 国产精品久久一区| 久久久久国产精品一区| 国产狼人综合免费视频| 亚洲欧洲国产一区| 欧美电影免费在线观看| 神马久久桃色视频| 欧美专区中文字幕| 精品国产一区二区在线| 国产日韩av在线播放| 国内精品久久久久久中文字幕| 亚洲一区二区在线播放| 91精品国产综合久久香蕉最新版| 欧美亚洲第一区| 国产精品h片在线播放| 久久亚洲一区二区三区四区五区高| 国产成人拍精品视频午夜网站| 欧美有码在线视频| 欧美成人精品xxx| 一个人www欧美| 欧美日韩免费区域视频在线观看| 韩国三级日本三级少妇99| 亚洲影视九九影院在线观看| 日韩高清欧美高清| 国产主播在线一区| 国产精品中文字幕久久久| 亚洲自拍偷拍福利| 亚洲欧美国产精品久久久久久久| 久久久www成人免费精品张筱雨| 欧美日韩午夜视频在线观看| 日韩中文字幕精品视频| 91精品视频在线看| 激情懂色av一区av二区av| 久久久久久国产免费| 欧美激情亚洲另类| 欧美中在线观看| 欧美一区二区视频97| 国产精品第2页| 热99久久精品| 中文字幕v亚洲ⅴv天堂| 国产suv精品一区二区| 欧美电影免费观看| 成人亚洲欧美一区二区三区| 国产精品成人av在线| 久久亚洲精品国产亚洲老地址| 国产一区二区免费| 久久久久久久久久久91| 精品久久久在线观看| 亚洲第一页中文字幕| 一区二区国产精品视频| 全球成人中文在线| 亚洲欧美在线播放| 亚洲精品在线91| 国产精品成人观看视频国产奇米| 欧美视频在线观看免费网址| 国产视频欧美视频| 日本午夜在线亚洲.国产| 国产日韩欧美中文在线播放| 成人美女av在线直播| 国产精品久久久久久久午夜| 欧美激情综合亚洲一二区| 91九色国产视频| 2018国产精品视频| 国内精品久久久久久影视8| 亚洲精品456在线播放狼人| 精品亚洲aⅴ在线观看| 久久久在线免费观看| 亚洲一区二区三区久久| 亚洲国产精彩中文乱码av| 亚洲精品mp4| 国产精品男女猛烈高潮激情| 亚洲老头同性xxxxx| 亚洲在线一区二区| 在线观看欧美www|