




已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
在 .NET 中使用 COM+ 服務(wù)升級(jí)到 Microsoft .NET Tim McCarthy - InterKnowlogyPaul D. Sheriff - PDSA, Inc. 2002 年 2 月 摘要:將新的 Microsoft .NET 組件添加到現(xiàn)有的 COM 和 COM+ 應(yīng)用程序中,它們將協(xié)同工作;如果您需要開發(fā)能夠參與事務(wù)、利用基于角色的安全性或者與隊(duì)列交互的 .NET 應(yīng)用程序,這樣做對(duì)您很有幫助。 目標(biāo) 學(xué)習(xí)在 Microsoft .NET 中使用 COM+ 服務(wù)。 創(chuàng)建被服務(wù)的組件。 部署被服務(wù)的組件。 前提條件要徹底理解本文內(nèi)容,需要滿足以下條件: 曾經(jīng)使用過 Microsoft Transaction Server (MTS) 并在 Microsoft Visual Basic 6.0 中分發(fā)過事務(wù)。 曾經(jīng)使用過 COM+ 服務(wù)中的基于角色的安全性。 曾經(jīng)在 COM+ 服務(wù)中創(chuàng)建和使用過隊(duì)列。 非常熟悉 .NET 類。 能夠在 .NET 中熟練創(chuàng)建控制臺(tái)應(yīng)用程序。 目錄 在 .NET 中使用 COM+ 服務(wù) 開發(fā)基于事務(wù)的組件 基于角色的安全性 使用排隊(duì)組件 自 Visual Basic 6.0 以來 COM+ 的變化 總結(jié) 在 .NET 中使用 COM+ 服務(wù)您可能曾經(jīng)使用 COM+ 應(yīng)用程序來托管使用 Visual Basic 或 C+ 編寫的組件。COM+ 提供了許多有價(jià)值的服務(wù),例如事務(wù)處理、排隊(duì)組件、實(shí)時(shí)激活、基于角色的安全性、共享屬性等。使用 COM+ 托管組件的一個(gè)主要優(yōu)點(diǎn)在于:不必編寫任何代碼,就可以更改組件的行為方式,例如將組件的事務(wù)支持設(shè)置為“需要”。通過在組件服務(wù) MMC 管理單元中,在 COM+ 組件上設(shè)置單選按鈕,每次創(chuàng)建組件時(shí),都將在 COM+ 事務(wù)的上下文中創(chuàng)建相應(yīng)的組件。當(dāng)組件使用 COM+ 事務(wù)時(shí),所有數(shù)據(jù)庫事務(wù)都由分布式事務(wù)處理協(xié)調(diào)器 (DTC) 處理。圖 1 顯示了在組件服務(wù)界面中設(shè)置“需要”事務(wù)選項(xiàng)的一個(gè)示例。圖 1:需要事務(wù)的 COM+ 組件示例設(shè)置組件安全性與設(shè)置事務(wù)支持一樣簡單。使用 COM+ 服務(wù)管理單元,您不用重新編譯代碼就可以決定哪個(gè)用戶可以運(yùn)行哪個(gè)組件,甚至哪個(gè)方法。.NET 可以使用所有 COM+ 服務(wù)在 .NET 框架中,只要您的類是從 System.EnterpriseServices.ServicedComponent 類派生的,就可以繼續(xù)使用 COM+ 提供的所有服務(wù)。任何從 ServicedComponent 類派生的類都由 COM+ 服務(wù)托管,并且可以使用所有可用的 COM+ 服務(wù)。表 1 列出了 .NET 中支持的全部 COM+ 服務(wù)以及每個(gè)服務(wù)的簡短說明。表 1:可用的 COM+ 服務(wù)COM+ 服務(wù)說明自動(dòng)事務(wù)處理應(yīng)用聲明事務(wù)處理功能COM 事務(wù)處理集成器 (COMTI)將 CICS 和 IMS 應(yīng)用程序封裝到自動(dòng)化對(duì)象中補(bǔ)償資源管理器 (CRM)對(duì)非事務(wù)性資源應(yīng)用原子性和持久性屬性實(shí)時(shí)激活通過方法調(diào)用激活對(duì)象,并在調(diào)用返回時(shí)停用此對(duì)象松散耦合的事件管理基于對(duì)象的事件對(duì)象構(gòu)造在構(gòu)造實(shí)例時(shí)向類實(shí)例傳遞持久字符串值對(duì)象池提供現(xiàn)成對(duì)象的池排隊(duì)組件提供異步消息隊(duì)列基于角色的安全性基于角色應(yīng)用安全權(quán)限共享屬性在服務(wù)器進(jìn)程中的多個(gè)對(duì)象之間共享狀態(tài)同步(活動(dòng))管理并發(fā)XA 互操作性支持 X/Open 事務(wù)處理模型在 .NET 中使用 COM+ 服務(wù)的原因如果要編寫能夠參與事務(wù)、利用基于角色的安全性或者與隊(duì)列交互作用的 .NET 應(yīng)用程序,就會(huì)用到 .NET 中提供的 COM+ 服務(wù)。正如您將在本文中了解到的,.NET 使這些服務(wù)很容易實(shí)現(xiàn)。提示:如果 .NET 代碼無需與 COM+ 服務(wù)一起工作,也就是說,您只在 .NET 框架中工作,那么請(qǐng)不要使用 System.EnterpriseServices,否則會(huì)造成性能下降。COM+ 組件開發(fā)概述在 .NET 中創(chuàng)建與 COM+ 服務(wù)交互的組件時(shí),需要執(zhí)行以下步驟。表 2 包含對(duì)各個(gè)步驟的說明。 1. 創(chuàng)建類庫。 2. 創(chuàng)建所有類,使它們繼承 System.EnterpriseServices.ServicedComponents 類。 3. 創(chuàng)建程序集。 4. 創(chuàng)建強(qiáng)名稱。 表 2:創(chuàng)建 .NET 組件時(shí)使用的術(shù)語定義 術(shù)語說明類庫包含類的 .dll 項(xiàng)目類型,此類項(xiàng)目通常沒有用戶界面System.EnterpriseServices.ServicedComponents.NET 框架中的一個(gè)類,使用它才能與 COM+ 服務(wù)進(jìn)行交互程序集對(duì)項(xiàng)目中所有類和接口的描述強(qiáng)名稱從程序集生成 GUID,以便可以使用 COM+ 服務(wù)注冊(cè)組件開發(fā)基于事務(wù)的組件在本文的第一部分,您將學(xué)習(xí)如何創(chuàng)建使用 COM+ 的事務(wù)性服務(wù)的 .NET 組件,還將學(xué)習(xí)如何編寫組件以及與此組件交互的前端應(yīng)用程序。創(chuàng)建 COM+ 事務(wù)組件要使 .NET 組件能夠在 COM+ 服務(wù)下運(yùn)行,需要執(zhí)行以下步驟。首先,必須創(chuàng)建一個(gè)從 System.EnterpriseServices.ServicedComponent 類派生的類。這個(gè)基類提供了與 COM+ 服務(wù)交互所需的所有適當(dāng)方法和屬性。需要將該類標(biāo)記為需要新事務(wù),并將所創(chuàng)建的任何方法標(biāo)記為在沒有錯(cuò)誤出現(xiàn)的情況下可以自動(dòng)完成事務(wù)處理。下面是具體操作。 1. 打開 Microsoft Visual Studio .NET,創(chuàng)建一個(gè)新的 ClassLibrary 類型的項(xiàng)目。 2. 將 Class1.vb 文件重命名為 COMPlusServices.vb。 3. 打開 COMPlusServices.vb 文件,將類名 Class1 更改為 COMPlusServices。 4. 在此新類中鍵入如下所示的代碼:5. Imports System.EnterpriseServices6. Imports System.Reflection7.8. *9. COM+ 注冊(cè)詳細(xì)信息 10.11. 提供 COM+ 應(yīng)用程序名 12. 13.14. 提供具有強(qiáng)名稱的程序集15. 17. *18.19. _20. Public Class COMPlusServices21. Inherits ServicedComponent 22.23. Public Sub New()24. MyBase.New()25. End Sub26.27. Public Function DoTransaction() _28. As String29. Return COM+ 成功30. End FunctionEnd Class此代碼以導(dǎo)入多個(gè)名稱空間開始,從而在聲明組件時(shí)省略了一些鍵入內(nèi)容。 31. 接下來是 COM+ 注冊(cè)詳細(xì)信息。請(qǐng)輸入以下代碼行:32. 提供 COM+ 應(yīng)用程序名 此行指定 ApplicationNameAttribute 的值為 ComPlusExample。這是在 COM+ 目錄中注冊(cè)該 COM+ 應(yīng)用程序時(shí)要使用的名稱。第一次調(diào)用此組件后,當(dāng)打開 MMC 管理單元的 COM+ 應(yīng)用程序文件夾時(shí),您會(huì)發(fā)現(xiàn)應(yīng)用程序名稱就是這個(gè)名稱。接下來的代碼聲明 AssemblyKeyFileAttribute 屬性:此屬性通知 COM+ 目錄有關(guān)強(qiáng)名稱的信息所在的位置。在后面的步驟中,將創(chuàng)建用于描述 COM+ 組件的 .SNK 文件。最后,使用以下代碼聲明類名 COMPlusServices: _ Public Public Class COMPlusServices此類名前面的屬性通知 COM+,您要將事務(wù)屬性設(shè)置為“需要”。添加此行代碼相當(dāng)于打開 COM+ 應(yīng)用程序管理單元(如圖 1 所示)并手動(dòng)設(shè)置此屬性。該類中的下一行代碼繼承 System.EnterpriseServices 名稱空間中的 ServicedComponent。Inherits ServicedComponent 如果不包含此行,將無法使此組件在 COM+ 下運(yùn)行。添加事務(wù)方法現(xiàn)在,類已經(jīng)設(shè)置完畢,可以創(chuàng)建真正能夠?qū)崿F(xiàn)某些功能的方法了。在您編寫的代碼中,DoTransaction 函數(shù)返回一個(gè)字符串值,但它只給出了您必須使用的語法,如果不使用此語法該方法將無法參與事務(wù)。 Public Function DoTransaction() As String Return COM+ 成功End Function在此方法前面加上 屬性很重要。這表示只要此方法中沒有出現(xiàn)異常,當(dāng)它結(jié)束時(shí)就會(huì)自動(dòng)調(diào)用 SetComplete。如果該方法中存在異常,則 .NET 運(yùn)行時(shí)將自動(dòng)調(diào)用 SetAbort 方法。這與在 Visual Basic 6.0 中編寫 COM 組件不同,在 Visual Basic 6.0 中,必須手動(dòng)顯式調(diào)用 SetComplete 和 SetAbort。創(chuàng)建強(qiáng)名稱在編譯組件之前,您需要為此組件的程序集指定一個(gè)強(qiáng)名稱。如果不指定,COM+ 目錄將不能識(shí)別該組件,也就無法注冊(cè)它。實(shí)際上,您已經(jīng)通過前面使用的 AssemblyKeyFile 屬性指定了強(qiáng)名稱,現(xiàn)在需要使用強(qiáng)名稱工具 (Sn.exe) 創(chuàng)建強(qiáng)名稱并使 GUID 與程序集關(guān)聯(lián)。 1. 打開命令提示。 2. 要?jiǎng)?chuàng)建強(qiáng)名稱,請(qǐng)?jiān)诿钐崾鞠骆I入以下代碼,然后按 Enter 鍵。sn -k ComPlusExample.snk3. 將 ComPlusExample.snk 文件從硬盤驅(qū)動(dòng)器的根目錄(通常為 C:/)復(fù)制到項(xiàng)目所在文件夾的 bin 目錄下。 現(xiàn)在,需要編譯此程序,使它能生成在 COM+ 注冊(cè)此組件必需的文件。在 Visual Studio .NET 中,在 Build(生成)菜單上,單擊 Build(生成)。生成客戶端測(cè)試應(yīng)用程序現(xiàn)在,組件生成完畢,需要生成客戶端應(yīng)用程序來調(diào)用并測(cè)試此組件。創(chuàng)建簡單的控制臺(tái)應(yīng)用程序,此程序中的模塊文件的 Main 方法創(chuàng)建新組件實(shí)例,并調(diào)用 DoTransaction() 方法。以下是主要步驟: 1. 在 Visual Basic .NET 中,創(chuàng)建新的控制臺(tái)應(yīng)用程序項(xiàng)目。 2. 添加對(duì)剛創(chuàng)建的組件的引用。 3. 鍵入如下所示的代碼。4. Module modMain5. Sub Main()6. Dim objCOMPlus As New _ 7. COMPlusJumpStart.COMPlusServices()8.9. Console.WriteLine(objCOMPlus.DoTransaction)10. Console.ReadLine()11. End SubEnd Module試一試最后,運(yùn)行此程序并查看其運(yùn)行情況。 1. 打開組件服務(wù) MMC 管理單元,驗(yàn)證您的組件已經(jīng)動(dòng)態(tài)注冊(cè)到 COM+ 目錄中。您應(yīng)該看到圖 2 所示的界面。 2. 編譯并運(yùn)行控制臺(tái)應(yīng)用程序。 圖 2:COM+ 目錄中的新建 .NET 服務(wù)組件 基于角色的安全性如果多個(gè)用戶調(diào)用在 COM+ 下運(yùn)行的 COM 組件,您需要進(jìn)行驗(yàn)證,只允許特定用戶訪問某個(gè)組件。COM+ 允許您定義角色并為其分配 NT 用戶。定義并設(shè)置角色后,就可以指定哪些角色可以運(yùn)行哪些組件,甚至指定可以運(yùn)行組件上的哪些方法。請(qǐng)?jiān)诖?COMPlusServices 類中添加一個(gè)方法,以添加基于角色的安全性。您需要?jiǎng)?chuàng)建名為 Managers 的角色,并在新方法中進(jìn)行測(cè)試,查看調(diào)用者是否為 Managers 角色。添加基于角色的安全性的步驟不用直接從組件服務(wù) MMC 管理單元修改 COM+ 應(yīng)用程序來添加安全角色,只需在項(xiàng)目中添加一個(gè)新屬性。使用 SecurityRoleAttribute 類添加新的 Managers 角色。這個(gè)類的構(gòu)造函數(shù)有兩個(gè)參數(shù):role(字符串值)和 everyone(布爾值)。role 參數(shù)指定要?jiǎng)?chuàng)建的角色的名稱,everyone 參數(shù)指定是否將內(nèi)置 Everyone 組添加到此角色的用戶中。 1. 在注釋“COM+ 注冊(cè)詳細(xì)信息”下鍵入以下代碼,將新的安全性角色添加到 COM+ 應(yīng)用程序中。2. *3. COM+ 注冊(cè)詳細(xì)信息 4.5. 基于角色的安全性屬性 6. 更改安全級(jí)別設(shè)置,以便在進(jìn)程級(jí)和組件級(jí)執(zhí)行訪問檢查。這使 COM+ 應(yīng)用程序具有安全性調(diào)用上下文。 7. 顯示 COM+ 服務(wù)管理單元。 8. 單擊 Security(安全性)選項(xiàng)卡并更改安全級(jí)別,如圖 3 所示。 圖 3:在 COM+ 目錄中設(shè)置安全級(jí)別屬性 除了手動(dòng)進(jìn)行處理外,還可以在組件中添加屬性,通知組件執(zhí)行訪問級(jí)別檢查。以下是在 COMPlusServices 類一開始的“COM+ 注冊(cè)詳細(xì)信息”部分添加的代碼。 檢查安全性角色現(xiàn)在,將新方法添加到名為 IsManager 的類中。此方法將檢查用戶是否為具有 Managers 角色的成員。此方法是一個(gè)函數(shù),它返回一個(gè)布爾值,表明調(diào)用者是否為 Managers 角色。要訪問調(diào)用該方法的用戶的安全上下文,需要使用 SecurityCallContext 類。通過調(diào)用 CurrrentCall 方法,獲得當(dāng)前用戶的上下文。然后調(diào)用 IsCallerInRole 方法,并傳遞 Managers 作為此角色的名稱。 1. 將以下方法添加到 COMPlusServices 類中。2. Public Function IsManager() As Boolean3.4. Dim objCallContext As SecurityCallContext = _ 5. SecurityCallContext.CurrentCall6. 7. IsManager = _ 8. objCallContext.IsCallerInRole(Managers)9.End Function現(xiàn)在,需要重新生成該組件以測(cè)試此新方法。 10. 從 Visual Studio .NET 的 Build(生成)菜單中,單擊 Rebuild Solution(重新生成解決方案)。 試一試1. 修改控制臺(tái)客戶端應(yīng)用程序的 Sub Main() 方法中的代碼。此代碼應(yīng)如下所示:2. Sub Main()3.4. Dim objCOMPlus As New _ 5. COMPlusJumpStart.COMPlusServices()6. 7. Console.WriteLine(objCOMPlus.DoTransaction)8. Console.WriteLine(objCOMPlus.IsManager().ToString)9. Console.ReadLine()10.End Sub11. 在命令提示下鍵入您編譯的可執(zhí)行文件的名稱,運(yùn)行控制臺(tái)應(yīng)用程序。 第一次運(yùn)行該代碼時(shí)會(huì)發(fā)生異常,并說明訪問被拒絕的原因是 Managers 角色中沒有添加任何用戶。要糾正這個(gè)異常,請(qǐng)將您自己添加為 Managers 中的用戶,并再次運(yùn)行該應(yīng)用程序。這次應(yīng)該不會(huì)出現(xiàn)任何異常。也可以在代碼中添加異常處理。以下是添加了異常處理代碼的客戶端應(yīng)用程序示例:Sub Main()Try Dim objCOMPlus As New _ COMPlusJumpStart.COMPlusServices() Console.WriteLine(objCOMPlus.DoTransaction) Console.WriteLine(objCOMPlus.IsManager().ToString) Console.ReadLine()Catch objException As Exception Console.WriteLine(出現(xiàn)錯(cuò)誤。 _ & 詳細(xì)信息: _ & objException.Message) Console.ReadLine()End TryEnd Sub使用排隊(duì)組件在 COM+ 應(yīng)用程序中,添加排隊(duì)支持很簡單。只需確保該應(yīng)用程序作為服務(wù)器程序運(yùn)行(進(jìn)程外),然后在選項(xiàng)卡上設(shè)置 Queued(排隊(duì))和 Listen(偵聽)屬性。完成這些設(shè)置后,客戶端應(yīng)用程序就可以異步或同步調(diào)用組件。該功能的精妙之處在于,不必更改 COM 對(duì)象中的代碼,只需在 COM+ 目錄中更改其屬性。.NET 框架支持排隊(duì)組件,而且,正如您期望的那樣,您可以通過使用屬性,而不用手動(dòng)更改 COM+ 目錄即可為組件提供排隊(duì)支持。請(qǐng)?jiān)?COMPlusServices 類中添加一個(gè)方法,然后在 .NET 客戶端應(yīng)用程序中使用 COM+ 排隊(duì)組件服務(wù)異步調(diào)用它。 1. 將 COM+ 應(yīng)用程序作為服務(wù)器程序(進(jìn)程外)。這是排隊(duì)組件的要求。要使用屬性達(dá)到此目的,請(qǐng)將以下代碼添加到項(xiàng)目中:2. *3. COM+ 注冊(cè)詳細(xì)信息 4.5. 在組件中添加排隊(duì)支持。使組件可訪問 MSMQ 隊(duì)列,并使其偵聽自己的隊(duì)列以處理消息。下面是使用屬性完成此過程的代碼:6. *7. COM+ 注冊(cè)詳細(xì)信息 8.9. 10. 在類 QueueTest 中添加一個(gè)方法。確保它是子例程且不返回任何值。使用它在 Windows 應(yīng)用程序日志中寫入信息。此代碼應(yīng)如下所示:11. Public Sub QueueTest()12. System.Diagnostics.EventLog.WriteEntry(_ 13. COMPlusServces, 隊(duì)列測(cè)試, _ 14. Diagnostics.EventLogEntryType.Error)End Sub就到這里吧。這就是為使組件成為 COM+ 排隊(duì)組件需要完成的全部操作。試一試現(xiàn)在,應(yīng)該通過創(chuàng)建另一個(gè)控制臺(tái)應(yīng)用程序并調(diào)用此組件,來嘗試運(yùn)行該排隊(duì)組件。 1. 創(chuàng)建新的控制臺(tái)應(yīng)用程序。 2. 將以下代碼添加到控制臺(tái)應(yīng)用程序的 Sub Main 過程中。3. Sub Main()4. Dim objTest As COMPl
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 突破局限新材料新技術(shù)的創(chuàng)新研究考核試卷
- 自動(dòng)售貨機(jī)課程設(shè)計(jì)答辯
- 電氣設(shè)備連鎖零售管理考核試卷
- 電氣機(jī)械的安全操作與事故處理考核試卷
- 環(huán)保工程環(huán)保產(chǎn)業(yè)發(fā)展趨勢(shì)考核試卷
- 平安工地宣傳教育演講稿
- 2025中英文翻譯貸款合同條款
- 2025年基本建設(shè)借款合同模板
- 2025車輛租賃合同范本
- 2025年簽訂房屋租賃合同應(yīng)注意的關(guān)鍵事項(xiàng)
- 工作室股東合同協(xié)議
- 關(guān)于市中小學(xué)“校園餐”突出問題專項(xiàng)整治情況的報(bào)告
- SZDB-Z 173-2016 物業(yè)綠化養(yǎng)護(hù)管理規(guī)范
- 藝考全真樂理試題及答案
- 攝影人像知識(shí)篇課件
- 急救知識(shí)培訓(xùn)課件下載
- 鍋爐安裝安全管理制度
- 液壓安全知識(shí)培訓(xùn)課件
- 工貿(mào)企業(yè)綜合應(yīng)急預(yù)案
- 中國安全生產(chǎn)中介服務(wù)市場(chǎng)深度調(diào)研分析及投資前景研究預(yù)測(cè)報(bào)告
- 運(yùn)輸考試試題及答案
評(píng)論
0/150
提交評(píng)論