Example #1
0
        public SqlRetryPolicyProviderManager(SqlRetryPolicyProviderConfigurationSection configSection)
        {
            _typeName  = GetType().Name;
            _providers = new ConcurrentDictionary <SqlRetryLogicMethod, SqlRetryPolicyProvider>();

            var retryLogicWithAppSpecifiedProvider = new HashSet <SqlRetryLogicMethod>();

            _retryLogicWithAppSpecifiedProvider = retryLogicWithAppSpecifiedProvider;

            if (configSection == null)
            {
                return;
            }

            if (!string.IsNullOrEmpty(configSection.InitializerType))
            {
                try
                {
                    var initializerType = Type.GetType(configSection.InitializerType, true);
                    _initializer = (SqlRetryLogicInitializer)Activator.CreateInstance(initializerType);
                    _initializer.Initialize();
                }
                catch (Exception e)
                {
                    throw SQL.CannotCreateSqlAuthInitializer(configSection.InitializerType, e);
                }
            }

            //// add user-defined providers, if any.
            ////
            if (configSection.Providers != null && configSection.Providers.Count > 0)
            {
                foreach (ProviderSettings providerSettings in configSection.Providers)
                {
                    SqlRetryLogicMethod    retrylogicmethod = RetryLogicEnumFromString(providerSettings.Name);
                    SqlRetryPolicyProvider provider;
                    try
                    {
                        var providerType = Type.GetType(providerSettings.Type, true);
                        provider = (SqlRetryPolicyProvider)Activator.CreateInstance(providerType);
                    }
                    catch (Exception e)
                    {
                        throw SQL.CannotCreateAuthProvider(retrylogicmethod.ToString(), providerSettings.Type, e);
                    }
                    if (!provider.IsSupported(retrylogicmethod))
                    {
                        throw SQL.UnsupportedAuthenticationByProvider(retrylogicmethod.ToString(), providerSettings.Type);
                    }

                    _providers[retrylogicmethod] = provider;
                    retryLogicWithAppSpecifiedProvider.Add(retrylogicmethod);
                }
            }
        }
Example #2
0
        /// <summary>
        /// Set an authentication provider by method.
        /// </summary>
        /// <param name="provider">Authentication provider.</param>
        /// <param name="sqlRetryLogicMethod">Authentication provider.</param>
        /// <returns>True if succeeded, false otherwise, e.g., the existing provider disallows overriding.</returns>
        public bool SetProvider(SqlRetryPolicyProvider provider, SqlRetryLogicMethod sqlRetryLogicMethod)
        {
            if (!provider.IsSupported(sqlRetryLogicMethod))
            {
                throw SQL.UnsupportedAuthenticationByProvider("", provider.GetType().Name);
            }

            _providers.AddOrUpdate(sqlRetryLogicMethod, provider, (key, oldProvider) =>
            {
                if (oldProvider != null)
                {
                    oldProvider.BeforeUnload(sqlRetryLogicMethod);
                }
                if (provider != null)
                {
                    provider.BeforeLoad(sqlRetryLogicMethod);
                }
                return(provider);
            });
            return(true);
        }
Example #3
0
 public override bool IsSupported(SqlRetryLogicMethod retrylogicmethod)
 {
     // Supported for Connection Open and Command Execution scenarios
     return((retrylogicmethod == SqlRetryLogicMethod.ConnectionOpen) || (retrylogicmethod == SqlRetryLogicMethod.CommandExecution));
 }
Example #4
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="reliabilityMethod"></param>
 /// <returns></returns>
 public abstract bool IsSupported(SqlRetryLogicMethod reliabilityMethod);
Example #5
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="reliabilityMethod"></param>
 public virtual void BeforeUnload(SqlRetryLogicMethod reliabilityMethod)
 {
 }
Example #6
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="reliabilityMethod"></param>
 /// <param name="provider"></param>
 /// <returns></returns>
 public static bool SetProvider(SqlRetryLogicMethod reliabilityMethod, SqlRetryPolicyProvider provider)
 {
     return(SqlRetryPolicyProviderManager.Instance.SetProvider(provider, reliabilityMethod));
 }
Example #7
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="reliabilityMethod"></param>
 /// <returns></returns>
 public static SqlRetryPolicyProvider GetProvider(SqlRetryLogicMethod reliabilityMethod)
 {
     return(SqlRetryPolicyProviderManager.Instance.GetProvider(reliabilityMethod));
 }
Example #8
0
        /// <summary>
        /// Get an authentication provider by method.
        /// </summary>
        /// <param name="reliabilityMethod">Authentication method.</param>
        /// <returns>Authentication provider or null if not found.</returns>
        public SqlRetryPolicyProvider GetProvider(SqlRetryLogicMethod reliabilityMethod)
        {
            SqlRetryPolicyProvider value;

            return(_providers.TryGetValue(reliabilityMethod, out value) ? value : null);
        }