2013-04-28 36 views
5

tôi đã sử dụng mã này để khởi tạo RetryManager từ Thư viện Doanh nghiệp:Initialize RetryManager từ EnterpriseLibraryContainer không làm việc

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(); 

Bây giờ tôi cập nhật gói Enterprise Library NuGet lên phiên bản mới nhất và không có EnterpriseLibraryContainer nữa.

Làm cách nào để khởi tạo RetryManager bằng Trình quản lý doanh nghiệp mới? Nó phải là luồng an toàn vì mã của tôi được thực hiện trên máy chủ web.

+0

Điều này thực sự bực bội. Tôi đang cố gắng học cách sử dụng khối đăng nhập và có cùng một vấn đề. Hy vọng rằng MS có thể sửa lỗi này sớm. –

Trả lời

3

tôi giải quyết nó theo cách này:

Hủy bỏ tất cả các gói NuGet cũ và cài đặt chỉ những hai:

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

Thêm mã này một lần trong ứng dụng:

var strategy = new FixedInterval("fixed", 10, TimeSpan.FromSeconds(3)); 
var strategies = new List<RetryStrategy> {strategy}; 
var manager = new RetryManager(strategies, "fixed"); 
RetryManager.SetDefault(manager); 

Sau đó sử dụng kết nối mới lớp học từ microsoft:

using (var connection = new ReliableSqlConnection(ConnectionString)) 
{ 
    connection.Open(); 
    ... 
    command.ExecuteNonQueryWithRetry(); 
} 

Tôi cũng đã xóa tất cả cấu hình khỏi Web.Config bởi vì nó nằm trong mã của tôi ngay bây giờ.

1

Không thể sử dụng EnterpriseLibraryContainer nữa, hãy xem bên dưới xem điều này có hữu ích không.

Các tùy chọn cấu hình cũng vẫn còn có sẵn:

Về cơ bản bạn cần gói NuGet EnterpriseLibrary.TransientFaultHandling.Configuration

Sau đó, bạn sẽ cần phải cập nhật web của bạn/app.config để cái gì đó như:

<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> 

Nếu bạn gặp lỗi thời gian chạy như thuộc tính "retryInterval" hoặc "fastFirstRetry" không phải là thuộc tính được công nhận, hãy thử "initialInterval" và "firstFastRetry" thay vào đó, chúng đã được đổi tên. Để tham khảo here.

On cấp mã bạn sẽ cần một cái gì đó như:

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; 

Hope this helps!