我使用以下代码从企业库初始化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/