Transient Fault Handling应用程序块是否处理当前连接到联合数据库的连接?

时间:2012-09-02 17:58:29

标签: .net azure database-connection azure-sql-database sharding

在Windows Azure中,我们使用Transient Fault Handling Application Block重试逻辑,该块在我们的工作者角色上按预期工作。 但是,我们最近将我们的SQL Azure数据库升级为联合,并且从那时起经历了一些问题。

我们的工作者角色偶尔会说某个特定的存储过程不存在。这是我们在Run循环中每秒检查的存储过程。角色循环遍历每个分片并在每个分片数据库上运行存储过程。这一切都运行正常,但偶尔我们会在日志中收到错误,说明它无法找到带有调用堆栈的存储过程,指示已重试TransientFaultHandling连接。

看到我们的代码只是创建一个连接(保持打开)连接到一个分片,然后执行存储过程,我认为候选人可能是因为如果有一个瞬态故障并且重试连接它可能最终连接回到根数据库而不是它曾经连接过的分片?

我的问题是TransientFaultHandling块是否正确解释了这一点,并在重试连接时重新连接回正确的分片,如果不是,那么这样做最好吗?

由于 加雷

1 个答案:

答案 0 :(得分:0)

我怀疑你是在正确的轨道上;连接可能会重置为根数据库。瞬态故障处理块将自动处理瞬态错误,但据我所知,它不是联邦感知的。

我想知道你的代码是如何构建的。但这是一个想法(如果这不是你已经在做的那样):你可以使用应用程序块来重试包含连接请求,USE命令(用于联合)和存储的proc调用的整段代码。所以如果失败了,一切都会被重试。您可以通过创建重试策略对象(这将是SQL数据库瞬态检测策略)来执行此操作,并调用ExecuteAction方法来执行您要完成的所有工作。

希望这会有所帮助。

的Herve