2012-09-02 29 views
2

在Windows Azure中,我们使用瞬态故障处理应用程序块重试逻辑,该工作按照我们的工作角色预期工作。 但是,我们最近将SQL Azure数据库升级为联邦数据库,并从那时起经历了一些问题。瞬态故障处理应用程序块是否处理当前连接到联合数据库的连接?

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

由于我们的代码只是创建一个连接(保持打开状态)连接到一个分片然后执行存储过程,所以我认为候选人可能是因为如果存在瞬时错误并且它重试连接,它可能最终结束连接回根数据库,而不是用来连接的碎片?

我的问题是,TransientFaultHandling块是否正确地解决了这个问题,并在重试连接时重新连接回正确的分片,如果不是这样做的最佳做法?

感谢 加雷思

回答

0

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

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

希望这会有所帮助。

Herve

+0

谢谢。这就是我的想法,我现在按照你的建议去做。 – user1642187