精品久久看,欧美成人久久一级c片免费,日本加勒比在线精品视频,国产一区二区三区免费大片天美,国产成人精品999在线,97理论三级九七午夜在线观看

東坡下載:內容最豐富最安全的下載站!

首頁最新資訊 → 使用KTM(內核事務管理器)進行文件事務處理

使用KTM(內核事務管理器)進行文件事務處理

相關文章發表評論 來源:本站時間:2012/1/13 11:05:13字體大小:A-A+

作者:點擊:214次評論:0次標簽:

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

從數據庫到自定義資源管理器都能參與到事務處理中來,在必要的時候保證數據的完整性,那么我們缺一個類型的資源操作,當然您也許早就想問了,關于文件系統的事務操作怎么辦?那么關于文件的事務操作是否有成熟的解決方案了,這點在前幾年還真沒辦法,但是最近微軟已經發布了關于事務性NTFS系統。都了解NTFS文件系統的優勢和好處,比起FAT和其他的什么HPFS文件系統有極大的改進,所以文件事務處理僅支持NTFS格式的文件系統。

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

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

KTMDTCLTM三者的使用關系簡單介紹

以前的理解思路和講解的角度對于KTM來說是沒多大關系的,但是由于他的出現我們有必要回歸到原點進行重新的梳理來進行一個更加系統深入的理解,僅僅是理解;

在查詢了大量的MSDN文檔和對System.Transaction命名空間的仔細翻閱發現微軟隱藏了很多.NET事務實現細節,比如System.Transaction.Oletx命名空間下的具體分布式協議的實現是沒有任何技術文檔看的,只能反編譯自己看代碼琢磨。

我們從LTM進行梳理,LTM是本地事務管理器那么他的存在只能在當前的托管AppDomain中,不能夠夸遠程處理,一旦跨遠程處理負責傳播的對象就要實現對本地事務的提升功能,包括WCF中的一系列的banding元素和事務感知型代碼,都必須對事務進行管理,但是大部分的代碼都是系統提供的。

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

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

 

該接口是向COM公開時的類型,用作于COM互操作使用的,需要通過該接口進行DTC的提升使用;為了驗證理解是否正確我們來進行一個簡單的測試,我們手動的通過System.Transaction.TransactionInterop類來獲取非托管的IDTCTransaction接口,請看代碼:

LTM事務:

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

 

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

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

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

利用TransactionInterop.GetDtcTransaction方法確實能獲取到DTC事務接口。

圖1:

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

由于KTM是屬于非托管實現,操作系統提供了文件操作的事務性API方法:

非事務處理 API

事務處理 API

CreateFile

CreateFileTransacted

CopyFileEx

CopyFileTransacted

MoveFileWithProgress

MoveFileTransacted

DeleteFile

DeleteFileTransacted

CreateHardLink

CreateHardLinkTransacted

CreateSymbolicLink

CreateSymbolicLinkTransacted

CreateDirectoryEx

CreateDirectoryTransacted

RemoveDirectory

RemoveDirectoryTransacted

 通過封裝這些方法就能夠實現事務性的文件操作,目前.NET沒有封裝成熟的類庫給我們使用,估計在后期的新版本類庫中可能會提供。

那么我們如何使用KTM事務處理呢,很幸運的是通過MSND的連接我們能夠獲取到微軟的事務開發人員編寫的源碼,下載地址為:

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

 源碼都是通過對上面的API進行封裝的,里面涉及到了很多關于內部API和COM之間的通訊細節,我們可以看看老外寫的代碼是復雜,也是我們學習的榜樣。

 上面我們說過只要夸當前應用程序域的事務處理就會自動提升為DTC事務,對于API的調用已經是出于互操作類型的,當前已經出于遠程調用,DTC已經具有與托管域的交互實現,所以我們只有通過DTC進入KTM進行操作。這也是MSDN官方的解釋。

圖2:

我們來看一個簡單的例子,該例子實現對文件的事務性刪除操作。

例子1:

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

 王清培版權所有

相關評論

閱讀本文后您有什么感想? 已有 人給出評價!

  • 2791 喜歡喜歡
  • 2101 頂
  • 800 難過難過
  • 1219 囧
  • 4049 圍觀圍觀
  • 5602 無聊無聊
熱門評論
最新評論
昵稱:
表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
字數: 0/500 (您的評論需要經過審核才能顯示)

本類常用軟件

主站蜘蛛池模板: 奇迹少女第5季免费观看 | 欧美大片大片播放网站 | 精品亚洲永久免费精品 | 伊人天堂在线 | 老色99久久九九精品尤物 | 国产成人精品综合在线观看 | аⅴ资源中文在线天堂 | 国产成人久久精品激情 | 久久国产精品久久国产精品 | 五月桃花网婷婷亚洲综合 | 日本亚洲成人 | 久久夜色精品国产亚洲 | 青草视频网站在线观看 | 你懂的视频在线播放 | 国产免费一级精品视频 | 久久成人国产精品二三区 | 天堂在线国产 | 欧美性精品 | 色婷婷视频在线观看 | 国产操操| 国产在线中文字幕 | 国产成人自产拍免费视频 | 免费观看120秒 | 久久亚洲网 | 成人综合婷婷国产精品久久免费 | 国产高清精品一级毛片 | 中文字幕在线不卡精品视频99 | 国产福利在线永久视频下载 | 久久中文字幕亚洲精品最新 | 一级毛片免费在线 | 99久久99久久免费精品蜜桃 | a久久99精品久久久久久不 | 看视频免费 | 丁香婷婷成人 | 久久亚洲午夜牛牛影视 | 精品午夜视频 | 日日导航 | 国产亚洲欧美精品久久久 | 国产观看精品一区二区三区 | 国产免费一级视频 | 瑟瑟网站免费 |