예제 #1
0
        public void SetOperationTimeout(string operation, RequestTimeoutType settingType, TimeSpan timeout)
        {
            string key = GenerateOperationTimeoutKey(operation);

            if (!requestTimeoutSettings.ContainsKey(key))
            {
                requestTimeoutSettings.TryAdd(key, new ConcurrentDictionary <RequestTimeoutType, TimeSpan>());
            }
            requestTimeoutSettings[key][settingType] = timeout;
        }
예제 #2
0
        protected internal TimeSpan GetDefaultTimeout(RequestTimeoutType settingType)
        {
            TimeSpan timeout;

            switch (settingType)
            {
            case RequestTimeoutType.ReadWriteTimeout:
                timeout = ReadWriteTimeout ?? DefaultRequestReadWriteTimeout;
                break;

            default:
                timeout = Timeout ?? DefaultRequestTimeout;
                break;
            }

            return(timeout);
        }
예제 #3
0
        protected internal TimeSpan GetOperationTimeout(string operation, RequestTimeoutType settingType)
        {
            TimeSpan?currentRequestTimeout = GetCurrentRequestTimeout(settingType);

            if (currentRequestTimeout.HasValue)
            {
                return(currentRequestTimeout.Value);
            }

            string key = GenerateOperationTimeoutKey(operation);

            if (requestTimeoutSettings.ContainsKey(key) && requestTimeoutSettings[key].ContainsKey(settingType))
            {
                return(requestTimeoutSettings[key][settingType]);
            }

            return(GetDefaultTimeout(settingType));
        }
예제 #4
0
 protected internal TimeSpan?GetCurrentRequestTimeout(RequestTimeoutType settingType)
 {
     return(settingType == RequestTimeoutType.Timeout ? CurrentRequestTimeout : CurrentRequestReadWriteTimeout);
 }
예제 #5
0
        private void InitOperationTimeoutSettings(string serviceName, string serviceNamespace, RequestTimeoutType settingType, string settingKey)
        {
            string settingValue = GetServiceSettingKey(settingKey, serviceName, serviceNamespace);
            string config       = ConfigUtils.GetNullableAppSetting(settingValue);

            if (!string.IsNullOrWhiteSpace(config))
            {
                string[] operationSettings = config.Trim().Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                TimeSpan defaultTimeout    = GetDefaultTimeout(settingType);
                int      timeoutMilliseconds;
                TimeSpan timeout;
                foreach (string operationSetting in operationSettings)
                {
                    string[] setting = operationSetting.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries);
                    if (setting.Length != 2)
                    {
                        continue;
                    }

                    string operation = setting[0].Trim();
                    timeout = defaultTimeout;
                    if (int.TryParse(setting[1].Trim(), out timeoutMilliseconds))
                    {
                        timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds);
                    }

                    string key = GenerateOperationTimeoutKey(operation);
                    if (!requestTimeoutSettings.ContainsKey(key))
                    {
                        requestTimeoutSettings[key] = new ConcurrentDictionary <RequestTimeoutType, TimeSpan>();
                    }
                    requestTimeoutSettings[key][settingType] = timeout;
                }
            }
        }