如何在NHibernate中添加Retry Logic来处理SQL Azure中的瞬态故障?

时间:2012-01-08 00:01:42

标签: nhibernate azure azure-sql-database

我们有一个在Windows Azure上运行的.NET应用程序,它使用NHibernate连接到SQL Azure数据库。有时需要添加重试逻辑来处理SQL Azure中的瞬态故障,例如此处所述 -

http://social.technet.microsoft.com/wiki/contents/articles/retry-logic-for-transient-failures-in-sql-azure.aspx

有人能指点我用NHibernate做这个吗?理想情况下,我想在NHibernate级别执行此操作,而不是包装每个单独的调用;我能够为另一个ORM,.netTiers(http://nettiers.com)做这个,我在这里概述 -

http://blog.ehuna.org/2010/01/how_to_stop_getting_exceptions.html

我做了搜索并找到了一些使用IDbCommand接口的自定义实现提及的答案 -

Intercept SQL statements containing parameter values generated by NHibernate

但我不确定这适用于NHibernate 3.2,我正在寻找一个我可以修改的明确例子。

如何自动对NH Azure进行NHibernate重试调用?假设有3次重试,每次重试等待100ms - 在3次重试之后,如果仍然失败,我们应该抛出异常。

3 个答案:

答案 0 :(得分:4)

我已经发布了一个处理这个问题的库:

https://github.com/robdmoore/NHibernate.SqlAzure

答案 1 :(得分:3)

这不是一个完整的运行示例,但您需要的文件在这里

https://github.com/craigvn/NHibernateRetryable

答案 2 :(得分:1)

也许这可以帮到你: http://www.objectreference.net/post/NHibernate-and-Execution-Plans.aspx。这里有一个类,您可以下载并使用它,并进行一些覆盖。

同时检查此链接:http://elliottjorgensen.com/nhibernate-api-ref/NHibernate.Driver/SqlClientDriver.html

我希望它无论如何都会有所帮助,我会遇到类似的情况。

此致