-->

如何重试逻辑添加到ASP.NET成员资格提供了SQL Azure的?(How to add retr

2019-07-31 02:01发布

我们有基于ASP.net的SqlMembershipProvider用户的Azure的SQL数据库上的数据库。 已变得显然的是,开箱的SqlMembershipProvider 4.0的不具有用于天青SQL连接所需的重试逻辑,其可滤除由于节流或可能会过期。

它可以实现我们具有此功能自己的成员提供,但它必须是完全一样的数据库交互作为标准的SqlMembershipProvider 4.0,以便在我们的数据库中的现有用户的工作。 然而对于这需要寻找到原来的SqlMembershipProvider 4.0的来源,该代码还没有被释放到开放以来2.0版本,所以我的问题是:

什么是最努力的方式来获得重试逻辑进入SqlMembershipProvider的? 而且还是那样地反映了SqlMembershipProvider的4.0 System.web.security.sqlMembershipProvider代码,并创建具有相同的功能的SqlMembershipProvider的,但使用重试逻辑的自定义的MembershipProvider如微软TransientFaultHandling ReliableSqlConnection的? 难道是合法的,做给微软的asp.net库例如许可证这样的事情(反映和创造类似的代码,但与附加功能)。 的System.Web?

Answer 1:

我想今天最好的解决办法是从System.Web.Providers(可用提供商继承ASP.NET通用供应商组装),只需注入重试政策,每个公共方法:

public class MyDefaultProfileProvider : System.Web.Providers.DefaultProfileProvider
{
    private RetryPolicy retryPolicy;

    public MyDefaultProfileProvider()
    {
        var retryStrategy = new Incremental(5, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(2));
        this.retryPolicy = new RetryPolicy<SqlAzureTransientErrorDetectionStrategy>(retryStrategy);
        retryPolicy.Retrying += retryPolicy_Retrying;
    }

    private void retryPolicy_Retrying(object sender, RetryingEventArgs e)
    {
        // Log, whatever...
    }

    public override System.Web.Profile.ProfileInfoCollection GetAllProfiles(System.Web.Profile.ProfileAuthenticationOption authenticationOption, int pageIndex, int pageSize, out int totalRecords)
    {
        int tempTotalRecords = 0;
        var profiles = retryPolicy.ExecuteAction(() =>
        {
            return base.GetAllProfiles(authenticationOption, pageIndex, pageSize, out tempTotalRecords);
        });
        totalRecords = tempTotalRecords;
        return profiles;
    }

    ...
}

要知道,如果它是合法重用代码,你应该看看许可证 。



文章来源: How to add retry logic to ASP.NET Membership Provider for Azure SQL?