经典技术文章翻译(1):COM+集成:.NET Enterprise Services 如何帮你建立分布式应用(2)
生活随笔
收集整理的這篇文章主要介紹了
经典技术文章翻译(1):COM+集成:.NET Enterprise Services 如何帮你建立分布式应用(2)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
實現客戶端 ??????當一個基于CLR?組件服務類被編譯和部署,你就需要在客戶端調用它。長遠來看,組件服務類沒什么特別之處;事實是使用COM+?運行時服務是不相關的。?這個代碼展示了簡單類早期的定義MyTxCfgClass: using ESExample; public class Client { ?public static void Main(string[] args) ?{ ??? MyTxCfgClass tcc = new MyTxCfgClass(); ????... // use object as desired ?} } ??????當然,與所有的CLR代碼,客戶端必須引用組件服務類程序集。 csc /r:ESExample.dll Client.cs 細微的復雜性 ??????這里你會看到,服務類通過?.NET CLR實現COM+是相當的容易。?System.EnterpriseServices?命名空間里的類提供了可以使用COM+運行時服務的API。運行時服務本身沒什么改變;他們工作的方式還是?COM+開發者熟知的。已經說了,?集成COM+和CLR?沒有涉及到如此細微的復雜性。?有幾個問題是使得使用CLR語言寫?COM+?代碼比我剛才提到的復雜的多。?有些問題會產生,因為CLR畢竟不是?COM,?因為它可以做COM做不到的事情。這些問題是不能解決的;?你只要知道如何CLR的特性如靜態方法和垃圾回收器?如何影響COM+?編程。
??????再學習這些問題前,你必須知道CLR?的類和?and COM+?上下文環境的關系。?首先,調用繼承自ServicedComponent的類的實例都會被COM+?上下文環境邊界偵聽。這些對象稱為上下文環境邊界。調用沒繼承自ServicedComponent的類的實例就不會被上下文環境邊界偵聽。?這些對象稱為context-agile。CLR對象默認就是context-agile。?當你繼承自ServicedComponent它們會變成context-bound?。(這個與?.NET remoting?上下文環境沒有關系,我下面會講到。)?圖?9說明的這個架構
來自10月?2001的?MSDN雜志
?本文轉自 frankxulei 51CTO博客,原文鏈接:http://blog.51cto.com/frankxulei/321005,如需轉載請自行聯系原作者
??????再學習這些問題前,你必須知道CLR?的類和?and COM+?上下文環境的關系。?首先,調用繼承自ServicedComponent的類的實例都會被COM+?上下文環境邊界偵聽。這些對象稱為上下文環境邊界。調用沒繼承自ServicedComponent的類的實例就不會被上下文環境邊界偵聽。?這些對象稱為context-agile。CLR對象默認就是context-agile。?當你繼承自ServicedComponent它們會變成context-bound?。(這個與?.NET remoting?上下文環境沒有關系,我下面會講到。)?圖?9說明的這個架構
| 圖?9?上下文環境對象 ?????非常有趣的是CLR?對象可以實現類似COM?對象和COM+?上下文環境交互這樣的行為。通過?COM,調用對象通常默認都會被偵聽;?所有的對象都是context-bound。COM?對象是context-agile?只有當它聚集了freethreaded marshaler (FTM)且不是第一個在COM+?上下文環境里?被創建的對象(因為它不是可識別的對象),?這樣情況下,調用不會被偵聽。?新方法確保調用真的需要的時候被預處理和遲處理的好處是減少了偵聽負荷。?特別地,如果組件服務類的實例返回了一個非組件服務類的實例?(例如一個?ADO.NET DataSet?對象),這個調用不會被偵聽。?并且DataSet對象不需要做任何事情,它就是照常工作。 ??????第二個你應該知道的事情是,?除了減少真正需要的交叉上下文偵聽外,?CLR/COM+集成盡可能地避免了托管類型和自有類型間的轉換。?來自托管的CLR?代碼到COM的調用是比較昂貴的。重要的部分就是類型的前后轉換—大部分在CLR strings和COM BSTRs之間。?請求穿過COM+環境邊界需要?調用一些固有的代碼,?組件已經相當聰明可以避免同樣來自CLR且處在同一進程里的調用者和被調用者之間的類型轉換。?或許有一天所有的COM+?運行時服務都會用CLR語言重新實現,調轉就不成問題了。?那時不管如何,這個優化都會使得COM+?偵聽更加快速。 靜態方法和屬性 ??????現在你知道了CLR代碼如何關聯上下文環境,?思考這個問題:如果一個基于CLR?組件服務類?包括靜態方法和屬性訪問器,?它將在什么上下文里執行呢?答案是調用者。?這個看起來不是很直觀,?但是它確實很有意義當你想靜態成員不是對象定義且不許要在對象駐留的上下文里訪問。例如,組件服務類在圖?10有個靜態方法,2,?和靜態屬性,4。這個代碼會在調用者的上下文里執行。?調用實例的方法1,?或者屬性3,通常在對象的上下文里執行。 ?????這時你或許想知道當你在屬性里保存了一個對象的靜態引用且你想在另外一個上下問里引用會發生什么事情。基于COM的COM+編程里,?在被成為靜態屬性的全局變量里保存了一個原始的對象引用,?會導致嚴重的錯誤因為你不可以把對象不加包裝地從原來的上下文里帶走。使用基于CLR COM+?代碼,?這個就不是一個問題。?CLR?使用相當瘦的代理包裝了每個組件服務類的實例子這樣其它上下問的對象就不需要保留對象的直接引用。如果代碼在一個保留基于CLR?組件服務類引用在靜態屬性的的上下文執行。它實際保留的是一個引用。如果另一個上下文里的代碼要通過靜態屬性訪問它,?特定的代理就發現變化而且封裝它自己保留的引用這樣偵聽就觸發了。這個是有個優美的解決方案,本質上你可以任何地方保存基于CLR服務類的實例并且都會正確觸發。 ?????
| ||
| 相關文章: Windows XP: Make Your Components More Robust with COM+ 1.5 Innovations House of COM: Migrating Native Code to the.NET CLR the "samples"technologies"component服務?subdirectory of the.NET Framework SDK 事務al COM+: Building?可伸縮的應用系統?by Tim Ewald (Addison-Wesley, 2001) | ||
| 作者Tim Ewald: DevelopMento的首席科學家,?最近出版的?事務性COM+:?創建可伸縮的應用系統?(Addison-Wesley,?2001)的作者 翻譯Frank Xu Lei:程序員,技術博客http://www.cnblogs.com/frank_xl/。 |
?本文轉自 frankxulei 51CTO博客,原文鏈接:http://blog.51cto.com/frankxulei/321005,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的经典技术文章翻译(1):COM+集成:.NET Enterprise Services 如何帮你建立分布式应用(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [LeetCode] Combinati
- 下一篇: 【Connection Events】【