2012-02-10 70 views
1

使用由實體框架和/或Linq to SQL支持的WCF RIA服務時,是否有任何已公佈的關於處理SQL Azure中的瞬態故障情況的指導?WCF RIA服務和SQL Azure瞬態錯誤處理

我們研究了CAT重試庫(Transient Fault Handling Framework for SQL Azure)和文檔(Retry Logic for Transient Failures in SQL Azure),特別是與Entity Framework和Linq to SQL相關的章節。

例如,在Linq to SQL的情況下,我們被指示將查詢/更新代碼封裝到ExecuteAction中並使用RetryPolicy執行。

這篇文章(Silverlight 4, EF 4, RIA Services & Windows Azure together)表明,我們所希望的最好的方式是爲連接添加彈性。但是,看起來我們可能通過覆蓋LinqToEntitiesDomainService和LinqToSqlDomainService上的PersistChangeSet方法並在其中添加重試來獲得我們想要的結果。

例如(僞代碼)

protected override bool PersistChangeSet() 
{ 
    e.Result = retry.ExecuteAction(() => 
     { 
      return base.PersistChangeSet(); 
     }); 

    return e.Result; 
} 

對此方法有何想法?那裏是否有任何文件或指導,具體涉及RIA服務?

+0

ria服務和實體框架是否存在特定的問題? Ria服務看起來像是一個與實體框架的重試問題無關的實現細節。 – BentOnCoding 2012-03-19 19:54:40

回答

1

這本來將是一個評論,但...

我最近使用實體框架RetryPolicy類,並沒有遇到任何問題。 添加重試次數非常簡單,影響很小。

鏈接文章的日期是(5月30日),它是在他們向企業庫添加對azure的支持之前。 (see this announcement

因此,根據上述情況,我會說RetryPolicy將滿足所述的要求。

+0

謝謝。看起來RetryPolicy在更新時很合適(請參閱問題中的PersistChangeSet),儘管我沒有測試過它。在讀取的情況下,我們有數百個查詢,並且每個查詢都重複一次,這是一項艱鉅的任務。另外,在大多數情況下查詢都是「延遲」的,即讀取返回IQueryables。如何處理這種情況?整合的故事不完整,因爲它是ADO.NET的,儘管我同意這些比EFI特定的RIA服務更具體。 – TheNextman 2012-03-19 23:58:18

+0

您的問題暴露了EF和當前ent lib的問題之一。您最終會在代碼的表面層遍佈重試邏輯。我認爲應該有一個非常低級別的委託,你可以在ado.net中訂閱,這樣實現這種類型邏輯的設置很容易在單點上注入。據我所知,沒有這種方法。 – BentOnCoding 2012-03-20 05:44:27