我使用以下代码从企业库初始化RetryManager:

using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
using Microsoft.Practices.EnterpriseLibrary.WindowsAzure.TransientFaultHandling;
using Microsoft.Practices.EnterpriseLibrary.WindowsAzure.TransientFaultHandling.SqlAzure;
using Microsoft.Practices.TransientFaultHandling;

...

var manager = EnterpriseLibraryContainer.Current.GetInstance<RetryManager>();
return manager.GetDefaultSqlConnectionRetryPolicy();

现在,我将Enterprise Library NuGet软件包更新为最新版本,并且不再有EnterpriseLibraryContainer。

如何使用新的企业管理器初始化RetryManager?它必须是线程安全的,因为我的代码是在Web服务器上执行的。

最佳答案

我是这样解决的:

删除所有旧的NuGet软件包,并仅安装这两个软件包:

<package id="EnterpriseLibrary.TransientFaultHandling" version="6.0.1304.0" targetFramework="net45" />
<package id="EnterpriseLibrary.TransientFaultHandling.Data" version="6.0.1304.0" targetFramework="net45" />

将此代码添加到应用程序中一次:
var strategy = new FixedInterval("fixed", 10, TimeSpan.FromSeconds(3));
var strategies = new List<RetryStrategy> {strategy};
var manager = new RetryManager(strategies, "fixed");
RetryManager.SetDefault(manager);

然后使用来自Microsoft的新连接类:
using (var connection = new ReliableSqlConnection(ConnectionString))
{
    connection.Open();
    ...
    command.ExecuteNonQueryWithRetry();
}

我还从Web.Config中删除了所有配置,因为它已经在我的代码中了。

关于c# - 从EnterpriseLibraryContainer初始化RetryManager无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16264085/

10-11 02:59