ADO.NET鏈接SQL Server有時候聯機會無端的中斷 (例如閒置太久或是交易時間太長等因素),這時又要從新鏈接,在.NET Framework 4.5以前,這件事情要由開發人員本身依照ADO.NET的SqlException來判斷並自行重試,重試的算法也要由開發人員來自定義,因此SQL Database的CAT (Customer Advisory Team) 開發了Transient Fault Framework給Windows Azure的開發人員使用,而.NET Framework 4.5.1則正式將它歸入ADO.NET的核心程序代碼中,可以斷開會話狀態並在適當的時候恢復會話,不少場景都會收益於這個功能.html
ADO.NET Idle Connection Resiliency這個功能被包裝在Entity Framework 6中,在DbConfiguration設定DbExecutionStrategy對象,Entity Framework 6內建了四種不一樣的DbExecutionStrategy[http://msdn.microsoft.com/pt-BR/data/dn456835],分別是: git
類github |
說明算法 |
DefaultExecutionStrategysql |
執行時不包含重試策略,這會自動用於SQL Server之外的數據庫。數據庫 |
DefaultSqlExecutionStrategy編程 |
執行時不包含重試策略,可是它會包裝例外情況,由使用者決定是否要啓用Connection Resiliency。框架 |
DbExecutionStrategy異步 |
這個對象是全部執行策略的基礎類別,它包裝了指數式重試原則 (exponential retry policy) 算法,而且由實做來決定要如何使用這個算法,以及重試的次數等。async |
SqlAzureExecutionStrategy |
專爲SQL Azure Database設計的重試策略,會依照已知的可能瞬斷問題進行自動的重試處理。 |
使用 IDbConnectionStrategy 能夠配置重試次數。 EF 中包含的 SQL Server 提供程序用來指定 default:SqlServerExecutionStrategy,它會顯示錯誤消息告知調整瞬態鏈接引起異常的策略。 另一個策略 SqlAzureExecutionStrategy 經過微調能夠鏈接 Windows Azure SQL 數據庫。
最簡單的策略指定方法是使用新的 DbConfiguration 類,使用該類能夠很容易配置特定數據庫提供程序的行爲。 如下命令可讓 EF 針對 SqlClient 使用 SQLAzureExecutionStrategy:
- SetExecutionStrategy (SqlProviderServices.ProviderInvariantName,
- () => new SqlAzureExecutionStrategy());
不只鏈接策略能夠配置,並且您還能夠本身建立策略並根據須要經過編程暫停使用它們。
上文提到的 Transient Fault Framework 其實Enterprise Library的一個模塊。這個框架考慮到了處理全部可能的瞬態錯誤的需求,在內部實現了一個「Retry Policy」來確保只處理須要的錯誤。在客戶進入重試狀態前會使用策略驗證這個異常是否屬於瞬態錯誤。
下面是幾個相似的項目: