2012-02-10 77 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