变态重口极致另类在线-波多久久夜色精品国产-波多野结衣在线观看一区-波多野结衣在线观看一区二区-污污的网站免费阅读-污污视频网址

當(dāng)前位置:首頁(yè)文章首頁(yè) 新聞中心

使用KTM(內(nèi)核事務(wù)管理器)進(jìn)行文件事務(wù)處理

作者:  來(lái)源:  發(fā)布時(shí)間:2012-1-13 11:05:13  點(diǎn)擊:

在本人最近的幾篇關(guān)于事務(wù)處理的文章中,從事務(wù)處理的整體概念到具體的C#代碼的實(shí)踐操作基本上都已經(jīng)能滿足日常的開發(fā)需求。文章中大部分的事務(wù)范圍類的操作都是局限于數(shù)據(jù)庫(kù),在本人的“.NET簡(jiǎn)談自定義事務(wù)資源管理器 ”一文中我雖然實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的自定義資源管理器,其實(shí)也能滿足基本的項(xiàng)目需求,核心功能也實(shí)現(xiàn)了,但是對(duì)于文件事務(wù)操作我們是力不從心的。

從數(shù)據(jù)庫(kù)到自定義資源管理器都能參與到事務(wù)處理中來(lái),在必要的時(shí)候保證數(shù)據(jù)的完整性,那么我們?nèi)币粋(gè)類型的資源操作,當(dāng)然您也許早就想問(wèn)了,關(guān)于文件系統(tǒng)的事務(wù)操作怎么辦?那么關(guān)于文件的事務(wù)操作是否有成熟的解決方案了,這點(diǎn)在前幾年還真沒(méi)辦法,但是最近微軟已經(jīng)發(fā)布了關(guān)于事務(wù)性NTFS系統(tǒng)。都了解NTFS文件系統(tǒng)的優(yōu)勢(shì)和好處,比起FAT和其他的什么HPFS文件系統(tǒng)有極大的改進(jìn),所以文件事務(wù)處理僅支持NTFS格式的文件系統(tǒng)。

事務(wù)性NTFS也稱做TXF,只有最新的Windows系統(tǒng)才支持(WindowsVista\Windows7\WindowsServer2008\WindowsServer2008R2),所以在XP上就別測(cè)試了。

在前幾篇文章中都是使用的LTM本地事務(wù)管理器,然后進(jìn)行事務(wù)范圍類的多個(gè)持久資源登記自動(dòng)事務(wù)提升為DTC類型的事務(wù)操作,由于DTC是非托管的實(shí)現(xiàn),所以在分布式事務(wù)操作中會(huì)存在數(shù)據(jù)封送的性能損耗,MSDN也提倡盡量少用DTC處理,由于存在著很多不確定因素在遇到問(wèn)題時(shí)比較棘手。但是在關(guān)鍵的時(shí)候還是需要這么用的,我們有必要去研究研究。

KTMDTCLTM三者的使用關(guān)系簡(jiǎn)單介紹

以前的理解思路和講解的角度對(duì)于KTM來(lái)說(shuō)是沒(méi)多大關(guān)系的,但是由于他的出現(xiàn)我們有必要回歸到原點(diǎn)進(jìn)行重新的梳理來(lái)進(jìn)行一個(gè)更加系統(tǒng)深入的理解,僅僅是理解;

在查詢了大量的MSDN文檔和對(duì)System.Transaction命名空間的仔細(xì)翻閱發(fā)現(xiàn)微軟隱藏了很多.NET事務(wù)實(shí)現(xiàn)細(xì)節(jié),比如System.Transaction.Oletx命名空間下的具體分布式協(xié)議的實(shí)現(xiàn)是沒(méi)有任何技術(shù)文檔看的,只能反編譯自己看代碼琢磨。

我們從LTM進(jìn)行梳理,LTM是本地事務(wù)管理器那么他的存在只能在當(dāng)前的托管AppDomain中,不能夠夸遠(yuǎn)程處理,一旦跨遠(yuǎn)程處理負(fù)責(zé)傳播的對(duì)象就要實(shí)現(xiàn)對(duì)本地事務(wù)的提升功能,包括WCF中的一系列的banding元素和事務(wù)感知型代碼,都必須對(duì)事務(wù)進(jìn)行管理,但是大部分的代碼都是系統(tǒng)提供的。

反編譯看了部分代碼,其中都會(huì)涉及到P\Invoke和COM\Interop之類的代碼,憑自己的理解它的目的是啟動(dòng)IDTCTransaction接口,也就是COM接口。理解這一點(diǎn)對(duì)于我們下面的KTM操作非常有利。LTM要想進(jìn)行DTC管理就必須通過(guò)OLE32.DLL進(jìn)行COM接口的加載也就是我們托管的.NET類庫(kù)里面的IDTCTransaction接口,看一下代碼:

//  Describes a DTC transaction. 
    [Guid("0fb15084-af41-11ce-bd2b-204c4f4f5020")] 
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
     public interface IDtcTransaction 

 

該接口是向COM公開時(shí)的類型,用作于COM互操作使用的,需要通過(guò)該接口進(jìn)行DTC的提升使用;為了驗(yàn)證理解是否正確我們來(lái)進(jìn)行一個(gè)簡(jiǎn)單的測(cè)試,我們手動(dòng)的通過(guò)System.Transaction.TransactionInterop類來(lái)獲取非托管的IDTCTransaction接口,請(qǐng)看代碼:

LTM事務(wù):

public static void StartCopy() 
  {
      using (TransactionScope transcope = new TransactionScope())
        {
            transcope.Complete();         }    } 

 

 
這樣的代碼是不會(huì)提升為DTC管理的,我們加一行代碼:
 
public static void StartCopy()
 {
      using (TransactionScope transcope = new TransactionScope())
      {
         IDtcTransaction idtc = TransactionInterop.GetDtcTransaction(Transaction.Current);          transcope.Complete();
        }
   } 
先解釋一下TransactionInterop類的作用,來(lái)自MSDN的說(shuō)明:

“促進(jìn)System.Transactions 和以前編寫的用于與 MSDTC、COM+ 或 System.EnterpriseServices 進(jìn)行交互的組件之間的交互。無(wú)法繼承此類。”

其實(shí)該類主要用來(lái)對(duì)早期的分布式事務(wù)技術(shù)進(jìn)行互操作,比如用來(lái)獲取DTC相關(guān)的COM對(duì)象或者用來(lái)進(jìn)行自定義的事務(wù)傳播,對(duì)于復(fù)雜的Oletx(Windows平臺(tái)的二進(jìn)制通訊協(xié)議)協(xié)議,我們不需要關(guān)心太多核心的東西就能進(jìn)行分布式事務(wù)的傳遞,這里可能Remoting有這個(gè)需求了。

利用TransactionInterop.GetDtcTransaction方法確實(shí)能獲取到DTC事務(wù)接口。

圖1:

有了TransactionInterop類,我們后面的擴(kuò)展就方便多了。

由于KTM是屬于非托管實(shí)現(xiàn),操作系統(tǒng)提供了文件操作的事務(wù)性API方法:

非事務(wù)處理 API

事務(wù)處理 API

CreateFile

CreateFileTransacted

CopyFileEx

CopyFileTransacted

MoveFileWithProgress

MoveFileTransacted

DeleteFile

DeleteFileTransacted

CreateHardLink

CreateHardLinkTransacted

CreateSymbolicLink

CreateSymbolicLinkTransacted

CreateDirectoryEx

CreateDirectoryTransacted

RemoveDirectory

RemoveDirectoryTransacted

 通過(guò)封裝這些方法就能夠?qū)崿F(xiàn)事務(wù)性的文件操作,目前.NET沒(méi)有封裝成熟的類庫(kù)給我們使用,估計(jì)在后期的新版本類庫(kù)中可能會(huì)提供。

那么我們?nèi)绾问褂肒TM事務(wù)處理呢,很幸運(yùn)的是通過(guò)MSND的連接我們能夠獲取到微軟的事務(wù)開發(fā)人員編寫的源碼,下載地址為:

http://download.microsoft.com/download/f/2/7/f279e71e-efb0-4155-873d-5554a0608523/TxF2007_07.exe

 源碼都是通過(guò)對(duì)上面的API進(jìn)行封裝的,里面涉及到了很多關(guān)于內(nèi)部API和COM之間的通訊細(xì)節(jié),我們可以看看老外寫的代碼是復(fù)雜,也是我們學(xué)習(xí)的榜樣。

 上面我們說(shuō)過(guò)只要夸當(dāng)前應(yīng)用程序域的事務(wù)處理就會(huì)自動(dòng)提升為DTC事務(wù),對(duì)于API的調(diào)用已經(jīng)是出于互操作類型的,當(dāng)前已經(jīng)出于遠(yuǎn)程調(diào)用,DTC已經(jīng)具有與托管域的交互實(shí)現(xiàn),所以我們只有通過(guò)DTC進(jìn)入KTM進(jìn)行操作。這也是MSDN官方的解釋。

圖2:

我們來(lái)看一個(gè)簡(jiǎn)單的例子,該例子實(shí)現(xiàn)對(duì)文件的事務(wù)性刪除操作。

例子1:

public static void StartDelete()
         {
             try             
{
                 using (TransactionScope transcope = new TransactionScope()) 
                {
                     Console.WriteLine("輸入要?jiǎng)h除的文件");
                     string path = Console.ReadLine();
                     Microsoft.KtmIntegration.TransactedFile.Delete(path);
                     Console.WriteLine("是否提交事務(wù)處理?"); 
                    if (Console.ReadLine() == "y")
                         transcope.Complete();
                     else 
                        Transaction.Current.Rollback(); 
                }
             }
             catch (Exception err) { Console.WriteLine(err); } 
 
我簡(jiǎn)單的寫了一段測(cè)試代碼,經(jīng)過(guò)測(cè)試是OK的。KTM能很好的結(jié)合DTC、LTM進(jìn)行混合的事務(wù)處理,對(duì)于我們上面引入的疑問(wèn)現(xiàn)在能完美的解決了。

 王清培版權(quán)所有

相關(guān)軟件

相關(guān)文章

文章評(píng)論

軟件按字母排列: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
主站蜘蛛池模板: 国产午夜精品福利 | 久草8| 黄免费观看 | 国产日韩欧美视频在线观看 | 亚洲国产精品一区二区九九 | 精品亚洲视频在线观看 | xxxxx日本护士xxxhd | 国产成人精品三级在线 | 亚洲最大激情网 | 日韩一区二区三区在线 | 嘿嘿嘿视频免费网站在线观看 | 欧美日本亚洲国产一区二区 | 久久亚洲人成网站 | 婷婷影院在线观看 | 色综合色狠狠天天久久婷婷基地 | 成人亚洲网| 夜夜夜夜曰天天天天拍国产 | 狠狠色狠狠色综合日日32 | 日本三级s级在线播放 | 黄色在线观看视频免费 | 成人羞羞视频播放网站 | 在线免费日韩 | 天天做夜夜做久久做狠狠 | 老司机精品影院一区二区三区 | 国产国语对白一区二区三区 | 国产无限免费观看黄网站 | aaa免费看| 五月综合色婷婷影院在线观看 | 看国产黄色片 | 插菊花综合1 | 日本夜夜 | 亚洲综合激情另类小说区 | 国产黄色大片又色又爽 | 久久人人澡人人爽人人爱 | 我爱52avαv永久网站 | 高h喷水荡肉爽文1v1 | 久久久亚洲欧美综合 | 夜夜拍拍 | 久久久婷婷亚洲5月97色 | 性欧美video另类hd亚洲人 | 亚洲欧美性视频 |