日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

如何在.NET中创建服务型组件

發(fā)布時間:2023/11/27 生活经验 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何在.NET中创建服务型组件 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
作者:張勁松??? 本文選自:賽迪網(wǎng)? 2002年12月03日?
?
對于在WINDOWS上作過一些開發(fā)的程序員來說,COM+應該是不會感到陌生的吧。COM+代表了Microsoft在COM技術平臺上的最高水平,也是Microsoft藉以和J2EE抗衡的支點(J2EE里的核心思想其實也從COM+的前身MTS中借鑒了許多)。事實上,COM+確實是非常出色的產品,對于中等難度的項目,用VB6加COM+的確是一個非常快速高效的技術組合。更值得一提的是COM+是完全免費的。只要你擁有了WINDIWS 2000或是XP。

在.NET推出后,人們似乎忘記了COM+。但如果你留心一下Microsoft技術發(fā)展的動向,你就不難發(fā)現(xiàn)在今后一到兩年內,COM+不會退出WINDOWS舞臺。它的許多服務功能還是.NET在短時間內無法替代的。比如說,COM+提供的實例管理(Instance management),交易處理(Transactions),斷開連接的異步隊列組件(Disconnected asynchronous queued components),基于角色的安全機制(Role-based securiry)等等。所以在今后一段時間內將是新舊技術結合,COM逐漸向.NET過渡的情形。在這種大的技術背景下,學習如何用.NET來編寫在COM+中運行的組件還是非常有意義的。

本文將結合一個小的例程向大家描述一下開發(fā)SERVICED COMPONENTS的基本流程、技術要點以及實際開發(fā)工作中應遵循的一些基本原則。

SERVICED COMPONENT簡介


SERVICED COMPONENT是指用任何和.NET CLS相兼容的程序語言開發(fā)的類。它必須直接或間接的派生于System.EnterpriseService.ServicedComponent這一基類。這樣開發(fā)的類可以在COM+的環(huán)境中運行,調用COM+的服務。在.NET開發(fā)環(huán)境里,可供調用的COM+服務有

· Automatic Transaction Processing )(自動交易處理)

· COM Transaction Integrator (COMTI) (COM交易集成)

· Compensating Resource Managers (CRMs) (補償性資源管理者)

· Just-In-Time Activation(即時激活)

· Loosely Coupled Events(松散連接事件)

· Object Construction (對象創(chuàng)建)

· Object Pooling(對象循環(huán))

· Queued Components(隊列組件)

· Role-Based Security(基于角色的安全)

· Shared Properties(共享的屬性)

· Synchronization (Activity) (同步)

· XA Interoperability (XA的互操作)

SERVICED COMPONENT的開發(fā)流程


創(chuàng)建類庫文件(Class Libray)

如例程所示,用戶編寫的類它必須直接或間接的派生于ServicedComponent基類

//例程的文件名是Bank.cs
using System.EnterpriseServices;
using System.Runtime.CompilerServices;
using System.Reflection;
namespace BankComponent
{//繼承ServicedComponent
public class Account : ServicedComponent{public bool transfer(int from_Account, int to_Account, double amount){//銀行轉帳的實現(xiàn)細節(jié),這里從略return true;} }
}


生成鑰匙文件(Key)

在COM+環(huán)境里運行的SERVICED COMPONENT必須是被簽署的(有STRONG NAME),所以你開發(fā)的組件要用"鑰匙"文件來簽署。鑰匙文件可以用.NET提供的工具sn.exe來生成。最簡單的方法是從VISUAL STUDIO提供的COMMNAD PROMPT打開一個DOS窗口,執(zhí)行如下命令:

?
?????

?你可以在源程序里加入COM+相關的屬性,這些屬性將反映到COM+的設置中。但這不是必須的。你可以不在程序里設置COM+相關的屬性,而是等組件發(fā)布后,在COM+提供的"組件服務瀏覽器"里設置組件的屬性。在你手工設置之前,COM+會給你的組件設以缺省值。
COM+可設置的屬性非常多,這里僅用幾個最常見的來示意一下。??????????

發(fā)布組件
SERVICED COMPONENT發(fā)布是相對比較復雜的一步。本文不想就COM+注冊的原理和細節(jié)展開討論,只就最基本的兩種發(fā)布方法做一介紹。要注意的一點是發(fā)布組件涉及到對COM+的目錄(Catelog)進行改動,所以操作者必須有管理員的權限。
a. 動態(tài)發(fā)布

動態(tài)發(fā)布不需要手工將組件安裝在COM+環(huán)境中,程序在運行的時候自動安裝組件到COM+中去(只有用.NET開發(fā)的客戶端程序才可以在運行時將組件安裝到COM+中,傳統(tǒng)的COM客戶程序沒有這一功能)。當管制客戶端程序(Managed Client Application)第一次調用SERVICED COMPONENT時,.NET運行時會自動偵測到SERVICED COMPONENT還沒有注冊安裝到COM+環(huán)境里,于是.NET運行時將根據(jù)該組件的屬性將它注冊安裝到COM+中去,并響應客戶程序的調用。以后客戶程序再次調用該組件的函數(shù)時,已經(jīng)安裝的組件會直接響應調用。

在管制客戶第一次調用SERVICED COMPONENT服務的時,.NET在幕后進行注冊和屬性設置,你會感到有非常明顯的延遲。在筆者的計算機上(1.13GHZ SONY NOTEBOOK),這一過程要花費大約12秒。好在這一注冊和安裝過程只發(fā)生一次。

動態(tài)發(fā)布的好處就是非常的簡單,用戶只需要把編譯好的組件(DLL ASSEMBLY)拷貝到客戶端應用程序的目錄下就可以了。.NET運行時會接管余下的事情。

b. 手工發(fā)布

手工發(fā)布比動態(tài)發(fā)布要麻煩一些,但你有更多的控制。另外動態(tài)發(fā)布要求客戶端程序目錄下有一份編譯好的組件拷貝。如果計算機上有多個客戶端程序的話,那就意味著該計算機上有多份同樣組件的拷貝。除了冗余以外,將來的組件升級也會有一些潛在的問題。在這種情況下,你可能更愿意將組件放到"公共匯編緩沖池去(GAC)"。手工發(fā)布組件你需要.NET提供的公共匯編緩沖池工具Gacuti.exe和服務安裝工具Regsvcs.exe。就文中給出的例程而言,你需要在DOS窗口中鍵入以下命令。



客戶端程序的開發(fā)

用.NET開發(fā)的SERVICES COMPONENT可以被.NET的客戶程序以及傳統(tǒng)的COM客戶程序所調用。下面給出兩個小的例程來示范一下。

a. .NET客戶程序

用.NET開發(fā)客戶程序沒有說明特別的。只需要引用開發(fā)好的組件就可以了。如果組件被安裝到了"公共匯編緩沖池去(GAC)"中,那么客戶端程序就不需要一份專用的拷貝了。

using BankComponent;
using System;
namespace BankComponentConsoleClient
{class Client{public static int Main() {bool bo = false;int start = Environment.TickCount;Account act = new Account();bo = act.transfer(123,234,50.0);int end = Environment.TickCount;Console.WriteLine(Peformance: " + (end-start));return 0;}}
}


b. 用VB6開發(fā)的COM客戶程序

在VB的集成開發(fā)環(huán)境里新建一個工程,在工程引用(Project Reference)中加入bank.tlb(當你在在運行Regsvcs.exe 時,類庫文件(Type Library)會自動生成),然后可以加入如下程序

Private Sub Command1_Click()Dim obj As New AccountDim bool As Booleanbool = obj.transfer(123,234,50.0)
MsgBox "The Result is " & bool
End Sub


使用SERVICED COMPONENT的注意事項


1. 考慮客戶端程序

在開發(fā)SERVICED COMPONENT時,要注意什么樣的客戶程序會使用它。 因為COM客戶程序和用.NET開發(fā)的客戶程序對SERVICED COMPONENT有不同的要求。如果將來有基于COM的客戶程序,那么要在開發(fā)組件中注意以下幾點:

· 不要使用帶參數(shù)的創(chuàng)建函數(shù)(Parameterized constructors)

· 不要使用靜態(tài)函數(shù) (Static function)

· 定義事件源接口(Event-source interfaces)

· 在用戶定義的異常(User-defined Exceptions)中包含HRESULTs

2. 慎重使用SERVICED COMPONENT

在COM+環(huán)境中運行.NET開發(fā)的組件要通過COM->.NET中間層,并且COM到COM+還會引入一層CONTEXT LAYER. 這對程序的性能有很大的影響。你如果運行一下本文提供的小程序有就會有一些感性認識。另外,在理論上講,使用SERVICED COMPONENT會影響程序的可移植性。因為COM+必盡是Microsoft專有的技術,其它平臺如LINUX即使移植.NET,也不會移植這部分功能。所以只有在真正需要COM+提供的服務,比如跨數(shù)據(jù)源的交易處理,基于角色的安全管理的時候,再使用SERVICED COMPONENT這一技術。

SERVICED COMPONENT其它用法


本文僅是對如何開發(fā)SERVICED COMPONENT作了一個簡單的介紹。全面掌握SERVICED COMPONENT還需要進一步的工作。筆者將在隨后的文章中進一步介紹如隊列組件(Queued Component),松散連接的事件(Loosely Couple Events)等等比較復雜的功能和用法。

總結

以上是生活随笔為你收集整理的如何在.NET中创建服务型组件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。