【導讀】本文介紹了在.net下如何開(kāi)發(fā)COM+組件,并以實(shí)例相附
一、問(wèn)題的提出
1、最終用戶(hù)的每次請求,都將讀取Mapping文件--可以通過(guò)緩存解決;
2、xxx子系統需要不斷的寫(xiě)入Mapping文件--也可以先寫(xiě)入內存然后批量寫(xiě)入文件解決;
二、分析解決問(wèn)題
由于分別有2個(gè)或更多子系統需要對同一文件進(jìn)行讀寫(xiě)操作,而客戶(hù)端又有很大的并發(fā)性,所以極可能出現讀寫(xiě)沖突或錯誤,也必將影響系統的性能。
通過(guò)調用共同的進(jìn)程外組件的方式來(lái)讀寫(xiě)文件;而這個(gè)共同的進(jìn)程外組件只有在自身啟動(dòng)的時(shí)候把文件內容load到內存,當文件有變化時(shí)更新內存。
三、COM+組件介紹
早在window2000發(fā)布時(shí)就已經(jīng)產(chǎn)生了COM+,并集成在操作系統中,在運行的時(shí)候是以服務(wù)的形式存在的。COM+增加了一系列的MTS(一種系統服務(wù),用于管理數據庫中的持久性數據,也處理在事務(wù)中的持久性消息隊列和文件系統)服務(wù):
1、事務(wù)服務(wù):它確保了在分布式系統中的數據完整性。
2、安全服務(wù):它的安全模型提供了處理安全性而不用編寫(xiě)任何代碼的方法。
3、同步服務(wù):提供了有管理地解決組件中并發(fā)問(wèn)題的方法,但卻不用編寫(xiě)代碼。
4、資源管理:(包括資源管理器和資源分配器)管理數據庫連接、網(wǎng)絡(luò )連接和內存等。
5、JIT激活:即(Just In Time)是從MTS繼承下來(lái)的一項服務(wù),當客戶(hù)調用時(shí)才將該對象的一個(gè)實(shí)例保持為活躍狀態(tài)并緩存在服務(wù)器內存中,使用完對象后,會(huì )通知MTS環(huán)境可以釋放該對象所占用的資源了,如數據庫連接。
6、對象池:提供一個(gè)線(xiàn)程池來(lái)存放現成的對象,以供下次再用,是系統的一項自動(dòng)服務(wù)。當有應用程序訪(fǎng)問(wèn)COM+組件時(shí),即為應用程序創(chuàng )建該組件的一個(gè)實(shí)例并存放在對象池中,應用程序關(guān)閉后即銷(xiāo)毀實(shí)例,可以自由配置組件使它的實(shí)例在池中的狀態(tài),實(shí)現了實(shí)例的重用性,提高應用程序的性能和伸縮性。
7、基于角色的安全:這個(gè)容易理解,即驗證角色,給予安全許可,給不同的用戶(hù)予不同的權限。
8、隊列組件(MSMQ):提供異步消息隊列,可以自動(dòng)按其形式將數據轉換成數據包。
9、共享屬性管理器(SPM):用來(lái)管理存儲在內存中的對象狀態(tài)信息,在一個(gè)服務(wù)器進(jìn)程內可以用來(lái)共享多個(gè)對象間的狀態(tài),并提供并發(fā)處理。
10、補償資源管理器(CRM):用于在處理事務(wù)期間生成日志文件并可處理系統崩潰。包括CRM工作器(是CRM的主要部分,通過(guò)CRM的基礎設施提供的接口將事務(wù)的相關(guān)信息寫(xiě)入日志,并在需要時(shí)檢索日志文件)和CRM補償器(用于在事務(wù)完成后,將事務(wù)和生成的日志文件提交給執行事務(wù)的用戶(hù))。
11、并發(fā):即允許一個(gè)應用程序中的多個(gè)進(jìn)程同時(shí)運行,進(jìn)程被分成各組上下文(有相同需求的對象集合)包含在單元(一個(gè)進(jìn)程內的一組上下文)中,一個(gè)進(jìn)程可包含多個(gè)上下文,都涉及到不同的需求的對象而且每個(gè)上下文都有一個(gè)唯一的COM對象來(lái)提供COM+事務(wù)處理和JIT激活等服務(wù)。利用COM+提供的工具可以創(chuàng )建執行交易的多層應用程序,還可以處理線(xiàn)程分配的問(wèn)題。OK,介紹完COM+的功能下面再介紹COM+的類(lèi)型。
COM+有幾種不同用途的類(lèi)型:
1、應用程序代理:包含應用程序注冊信息的文件,即當有客戶(hù)訪(fǎng)問(wèn)遠程計算機的服務(wù)器程序時(shí),運行在客戶(hù)端的應用程序代理就會(huì )將服務(wù)器應用程序的信息寫(xiě)入客戶(hù)端器計算機中。
2、服務(wù)器應用程序:即在COM+應用程序本身的進(jìn)程內執行COM+應用程序,同時(shí)使用并發(fā)性來(lái)處理組件。
3、庫應用程序:是在客戶(hù)應用程序的進(jìn)程內執行的,裝載在客戶(hù)應用程序進(jìn)程內的,使用基于任務(wù)的安全性,缺點(diǎn)是不支持遠程訪(fǎng)問(wèn)和隊列組件。
4、COM+預安裝應用程序:到管理工具中的組件服務(wù)中的COM+應用程序文件夾中查看就明白什么是COM+預安裝應用程序了,它是在COM+安裝過(guò)程中自動(dòng)安裝進(jìn)組件服務(wù)的應用程序,不能修改也不能刪除。
同時(shí)涉及到一個(gè)叫“程序集(Assembly )”的概念:它是CLR所有類(lèi)型和其它資源(如位圖文件等)的集合??赏ㄟ^(guò)管理工具下的“配置.NET框架”來(lái)查看。包括有私有和共享的程序集。私有程序集:它只能被放在與該程序集相同路徑的應用程序訪(fǎng)問(wèn)。默認為私有,必須放在使用它的應用程序的文件夾中。共享程序集:指添加在GAC(Global Assembly Cache)中的程序集。GAC是專(zhuān)門(mén)用來(lái)存放程序集中,使應用程序可以共享這些程序集,有一點(diǎn)必須注意,就是存放在GAC中的程序集必須有一個(gè)唯一的名字,可以通過(guò)在.NET命令執行窗口中打入sn -k assemblyname.snk 來(lái)生成一個(gè)唯一的名稱(chēng),叫做強名稱(chēng),生成強名稱(chēng)后,會(huì )有一個(gè)公鑰附加在此程序集上,用于阻止名字相似而被代替的危險。
.NET中對程序集的安全性提供了兩種機制:一種是前面提到的強名稱(chēng),一種是使用Signcode(可理解為數字簽名)。Signcode.exe用來(lái)標記一個(gè)程序集,同時(shí)嵌入一個(gè)數字簽名到程序集中,可以讓用戶(hù)識別創(chuàng )建此程序集的開(kāi)發(fā)者。
(注:在GAC中不能有兩個(gè)相同名稱(chēng)的強名稱(chēng),否則就不叫強名稱(chēng)了,但可以存儲一個(gè)程序集的多個(gè)拷貝而且在GAC中的程序集只能被擁有一定權限的用戶(hù)刪除)
關(guān)于程序集的版本號:每一個(gè)版本都有一個(gè)128位的版本號,表示為四部分:Major(為主版本號,項目有變化時(shí)即改變).Minor(添加一個(gè)功能到項目時(shí)改變).Build.Revision(后兩個(gè)是自動(dòng)更新的),這些版本信息可以通過(guò)在應用程序中的AssemblyInfo.cs文件來(lái)查看。
又是一堆的理論,下面介紹COM+的應用:在.NET中使用COM+服務(wù)的組件就叫做.NET服務(wù)組件,跟一般的組件不同,區別在于前者使用了COM+服務(wù)。使用.NET服務(wù)組件的目的也就是為了可以訪(fǎng)問(wèn)COM+服務(wù)的一些基類(lèi)如ServicedComponent和自動(dòng)事務(wù)處理,JIT,對象池和安全性方面等。