自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

告訴教你如何在ADO.NET事務(wù)中登記資源

開發(fā) 后端
這里就ADO.NET事務(wù)的使用,持久登記、可變登記都有做出詳細的介紹,喜歡研究事物的朋友仔細閱讀,相信會給大家?guī)砑夹g(shù)上的提高的。

ADO.NET事務(wù)有很多值得學(xué)習(xí)的地方,這里我們主要介紹在事務(wù)中將資源登記為參與者,包括介紹持久登記等方面。參與事務(wù)的每個資源都由資源管理器進行管理,而后者的操作則由事務(wù)管理器進行協(xié)調(diào)。這一協(xié)調(diào)通過通知來執(zhí)行,這些通知會提供給已通過事務(wù)管理器在事務(wù)中登記的訂戶。本主題介紹如何在事務(wù)中登記一個資源(或多個資源)以及不同的登記類型。在單階段和多階段中提交事務(wù)主題介紹如何在已登記的資源之間協(xié)調(diào)事務(wù)提交。

在ADO.NET事務(wù)中登記資源

資源若要參與事務(wù),它必須在事務(wù)中進行登記。Transaction類定義了一組提供此功能的方法,這些方法的名稱以Enlist開頭。不同的Enlist方法對應(yīng)于資源管理器可能具有的不同登記類型。具體來說,EnlistVolatile方法用于登記可變資源,而EnlistDurable方法則用于登記持久資源。

#T#資源管理器的持久性(反之為可變性)是指資源管理器是否支持故障恢復(fù)。如果資源管理器支持故障恢復(fù),則它會在第1階段(準備階段)將數(shù)據(jù)保存到持久存儲區(qū)中;這樣,一旦資源管理器出現(xiàn)故障,它就可在恢復(fù)時在事務(wù)中重新登記,并根據(jù)從TM接收到的通知執(zhí)行適當?shù)牟僮?。通常,可變資源管理器管理如內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)之類的可變資源(如內(nèi)存中的事務(wù)處理哈希表),而持久資源管理器則管理具有更持久的后備存儲區(qū)的資源(例如,其后備存儲區(qū)為磁盤的數(shù)據(jù)庫)。

為了簡單起見,在根據(jù)資源的持久性支持決定是使用EnlistDurable還是EnlistVolatile方法后,應(yīng)為資源管理器實現(xiàn)IEnlistmentNotification接口,從而將資源登記為參與兩階段提交(2PC)。有關(guān)2PC的更多信息,請參見在單階段和多階段中提交事務(wù)。單個參與者可以多次調(diào)用EnlistDurable和EnlistVolatile來登記到其中的某一協(xié)議。

持久登記

EnlistDurable方法用于登記要作為持久資源參與事務(wù)的資源管理器。如果持久資源管理器在ADO.NET事務(wù)執(zhí)行期間關(guān)閉,則它在重新聯(lián)機后,應(yīng)在它作為參與者且未完成第2階段的所有事務(wù)中重新登記(使用Reenlist方法)來執(zhí)行恢復(fù),并在完成恢復(fù)處理后調(diào)用RecoveryComplete。有關(guān)恢復(fù)的更多信息,請參見執(zhí)行恢復(fù)。

EnlistDurable方法都采用Guid對象作為其第一個參數(shù)。事務(wù)管理器使用Guid將持久登記與特定的資源管理器關(guān)聯(lián)。因此,資源管理器在重新啟動后必須統(tǒng)一使用同一Guid來標識自身,即使跨不同的資源管理器時也是如此;否則恢復(fù)操作就可能失敗。

EnlistDurable方法的第二個參數(shù)是對資源管理器所實現(xiàn)的用于接收事務(wù)通知的對象的引用。您所使用的重載會向事務(wù)管理器通知資源管理器是否支持單階段提交(SPC)優(yōu)化。大多數(shù)情況下,應(yīng)實現(xiàn)IEnlistmentNotification接口來參與兩階段提交(2PC)。但如果要優(yōu)化提交過程,可考慮實現(xiàn)ISinglePhaseNotification接口來參與SPC。有關(guān)SPC的更多信息,請參見在單階段和多階段中提交事務(wù)和使用單階段提交和可提升的單階段通知進行優(yōu)化。

第三個參數(shù)是EnlistmentOptions枚舉,該枚舉的值可以為None或EnlistDuringPrepareRequired。如果將該值設(shè)置為EnlistDuringPrepareRequired,則這種登記類型可在從事務(wù)管理器接收到準備通知時登記附加資源管理器。但是,您應(yīng)清楚這種登記類型不適合執(zhí)行單階段提交優(yōu)化。

可變登記

管理可變資源(如緩存)的參與者應(yīng)使用EnlistVolatile方法進行登記。此類對象可能無法獲取事務(wù)的結(jié)果,或者在系統(tǒng)出現(xiàn)故障后可能無法恢復(fù)它們所參與的任何事務(wù)的狀態(tài)。

如前面所述,資源管理器在管理內(nèi)存中的可變資源時應(yīng)進行可變登記。使用EnlistVolatile的優(yōu)點之一就是不會強制執(zhí)行不必要的事務(wù)升級。有關(guān)事務(wù)升級的更多信息,請參見事務(wù)管理升級主題。登記可變性意味著事務(wù)管理器處理登記的方式與事務(wù)管理器對資源管理器的預(yù)期行為之間存在差異。這是因為可變資源管理器不執(zhí)行恢復(fù)。EnlistVolatile方法不采用Guid參數(shù),因為可變資源管理器不執(zhí)行恢復(fù),并且不會調(diào)用需要Guid的Reenlist方法。

與持久登記一樣,無論使用哪種重載方法進行登記,都會向事務(wù)管理器指示資源管理器是否支持單階段提交優(yōu)化。由于可變資源管理器不能執(zhí)行恢復(fù),因此在準備階段不會為可變登記寫入任何恢復(fù)信息。因此,調(diào)用RecoveryInformation方法會導(dǎo)致InvalidOperationException。

責任編輯:田樹 來源: 博客
相關(guān)推薦

2009-11-12 14:32:21

ADO.NET分布式事

2009-11-13 09:30:28

2009-11-13 14:29:13

ADO.NET Mer

2009-11-12 14:26:34

ADO.NET執(zhí)行事務(wù)

2009-12-30 16:50:26

ADO.NET事務(wù)

2010-01-04 13:06:50

ADO.NET事務(wù)

2009-11-13 17:01:07

ADO.NET事務(wù)處理

2009-12-28 15:11:36

ADO.NET專家

2009-11-11 14:04:14

ADO.NET連接池

2009-11-03 14:22:10

ADO.NET Exc

2011-05-20 11:31:07

ADO.NET

2009-11-03 16:37:10

2009-11-04 15:05:45

ADO.NET事務(wù)

2009-11-13 10:53:54

ADO.NET Dat

2009-09-14 13:37:25

LINQ ADO.NE

2009-11-11 10:49:39

ADO.NET ADO

2009-12-22 09:36:29

ADO.NET代碼

2009-12-24 11:12:29

ADO.Net技術(shù)

2009-02-02 10:00:11

ADO.NETASP.NET

2009-12-31 14:46:29

ADO.NET Ent
點贊
收藏

51CTO技術(shù)棧公眾號