Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从EnterpriseLibraryContainer初始化RetryManager不工作_C#_Azure_Enterprise Library - Fatal编程技术网

C# 从EnterpriseLibraryContainer初始化RetryManager不工作

C# 从EnterpriseLibraryContainer初始化RetryManager不工作,c#,azure,enterprise-library,C#,Azure,Enterprise Library,我使用以下代码从企业库初始化RetryManager: using Microsoft.Practices.EnterpriseLibrary.Common.Configuration; using Microsoft.Practices.EnterpriseLibrary.WindowsAzure.TransientFaultHandling; using Microsoft.Practices.EnterpriseLibrary.WindowsAzure.TransientFaultHand

我使用以下代码从企业库初始化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();
使用Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
使用Microsoft.Practices.EnterpriseLibrary.WindowsAzure.TransientFaultHandling;
使用Microsoft.Practices.EnterpriseLibrary.WindowsAzure.TransientFaultHandling.SqlAzure;
使用Microsoft.Practices.TransientFaultHandling;
...
var manager=EnterpriseLibraryContainer.Current.GetInstance();
return manager.GetDefaultSqlConnectionRetryPolicy();
现在我将企业库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" />

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

无法再使用EnterpriseLibraryContainer,请查看下面的是否有帮助

配置选项仍然可用:

基本上,您需要nuget包

然后,您需要将web/app.config更新为以下内容:

<configSections>
    <section name="RetryPolicyConfiguration" type="Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling.Configuration.RetryPolicyConfigurationSettings, Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling.Configuration, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
    <section name="typeRegistrationProvidersConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.TypeRegistrationProvidersConfigurationSection, Microsoft.Practices.EnterpriseLibrary.Common, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</configSections>

<typeRegistrationProvidersConfiguration>
    <clear />
    <add sectionName="RetryPolicyConfiguration" name="RetryPolicyConfiguration" />
</typeRegistrationProvidersConfiguration>

<RetryPolicyConfiguration defaultRetryStrategy="Fixed Interval Retry Strategy"
                        defaultSqlConnectionRetryStrategy="Incremental Retry Strategy">
    <incremental name="Incremental Retry Strategy" retryIncrement="00:00:01" initialInterval="00:00:01" maxRetryCount="10" />
    <fixedInterval name="Fixed Interval Retry Strategy" retryInterval="00:00:01" maxRetryCount="10" />
    <exponentialBackoff name="Backoff Retry Strategy" minBackoff="00:00:01" maxBackoff="00:00:30"
                    deltaBackoff="00:00:10" maxRetryCount="10" firstFastRetry="false"/>
</RetryPolicyConfiguration>
RetryPolicy retryPolicy;

try
{
    retryPolicy = RetryPolicyFactory.GetDefaultSqlConnectionRetryPolicy();
}
catch (NullReferenceException)
{
    throw new Exception("Unable to read transient fault handling behaviour from config, config section for TransientFaultHandling seems to be missing.");
}

return retryPolicy;

希望这有帮助

这确实令人沮丧。我试图学习使用日志块,但遇到了同样的问题。希望MS能尽快解决这个问题。
<configSections>
    <section name="RetryPolicyConfiguration" type="Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling.Configuration.RetryPolicyConfigurationSettings, Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling.Configuration, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
    <section name="typeRegistrationProvidersConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.TypeRegistrationProvidersConfigurationSection, Microsoft.Practices.EnterpriseLibrary.Common, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</configSections>

<typeRegistrationProvidersConfiguration>
    <clear />
    <add sectionName="RetryPolicyConfiguration" name="RetryPolicyConfiguration" />
</typeRegistrationProvidersConfiguration>

<RetryPolicyConfiguration defaultRetryStrategy="Fixed Interval Retry Strategy"
                        defaultSqlConnectionRetryStrategy="Incremental Retry Strategy">
    <incremental name="Incremental Retry Strategy" retryIncrement="00:00:01" initialInterval="00:00:01" maxRetryCount="10" />
    <fixedInterval name="Fixed Interval Retry Strategy" retryInterval="00:00:01" maxRetryCount="10" />
    <exponentialBackoff name="Backoff Retry Strategy" minBackoff="00:00:01" maxBackoff="00:00:30"
                    deltaBackoff="00:00:10" maxRetryCount="10" firstFastRetry="false"/>
</RetryPolicyConfiguration>
RetryPolicy retryPolicy;

try
{
    retryPolicy = RetryPolicyFactory.GetDefaultSqlConnectionRetryPolicy();
}
catch (NullReferenceException)
{
    throw new Exception("Unable to read transient fault handling behaviour from config, config section for TransientFaultHandling seems to be missing.");
}

return retryPolicy;