对金正接口的切换

这个对访问的C++的命令做过一些封装后,提供给外面的只能做Pool的开发了。这边首先是configuration和connnectionoption要提供给外部做为可以切换的服务器。
   public static class SZKingdomPool
    {
          //static List<KCBPConnectionOptions> SZKingdomFactory = new List<KCBPConnectionOptions>();
          static SZKingdomPoolConfiguration poolConfiguration = SZKingdomPoolConfiguration.LoadConfiguration();
         
          static Dictionary<int, Dictionary<KCBPConnectionOptions, SZKingdomConfiguration>> SZKingdomFactory = new Dictionary<int, Dictionary<KCBPConnectionOptions, SZKingdomConfiguration>>();
          static int ConnectionOptionsIndex = 0;

      
        public static void InitializeSZkongdom()
        {
            SZKingdomConfiguration Configuration;
            for (int i = 0; i < poolConfiguration.Size; i++)
            {
                Configuration = SZKingdomConfiguration.LoadConfiguration("SZKingdomConfiguration"+i);
                KCBPConnectionOptions _connectionOptions = new KCBPConnectionOptions();
                Dictionary<KCBPConnectionOptions, SZKingdomConfiguration> collections = new Dictionary<KCBPConnectionOptions, SZKingdomConfiguration>();
                _connectionOptions.Address = Configuration.IpAddress;
                _connectionOptions.ServerName = Configuration.ServerName;
                _connectionOptions.Protocol = Configuration.Protocol;
                _connectionOptions.Port = Configuration.Port;
                _connectionOptions.SendQName = Configuration.SendQName;
                _connectionOptions.ReceiveQName = Configuration.ReceiveQName;
                //SZKingdomFactory.Add(_connectionOptions);
                collections.Add(_connectionOptions, Configuration);
                SZKingdomFactory.Add(i, collections);
                
            }
        }

        public static  Dictionary<KCBPConnectionOptions, SZKingdomConfiguration> GetAvailableSZKingdom()
        {
            lock (SZKingdomFactory)
            {
                if (SZKingdomFactory.Count == 0)
                {
                    InitializeSZkongdom();
                }
                //return SZKingdomFactory[ConnectionOptionsIndex++ % SZKingdomFactory.Count];
                return SZKingdomFactory[ConnectionOptionsIndex++ % SZKingdomFactory.Count];
            }
        }
    }

  这边是用dictionary的泛型来存放,由于每次去获得金正接口的ip以及服务器信息需要用GetAvailableSZKingdom方法来切换,这边用了取余来不断跳转。   

这边是用dictionary的泛型keyvaluepair来foreach出来,再存放到静态的变量里。

public MarketDataLibrary()
		{
             _wrapper=new KCBPLibraryWrapper();
            if (_wrapper.GetConnectionOption().Address== "") {
                //_connectionOptions = SZKingdomPool.GetAvailableSZKingdom();
                _collections = SZKingdomPool.GetAvailableSZKingdom();
                foreach (KeyValuePair<KCBPConnectionOptions, SZKingdomConfiguration> kv in _collections)
                {
                    _connectionOptions = kv.Key;
                    Configuration = kv.Value;
                }
                _wrapper.SetConnectionOption(_connectionOptions);
                _wrapper.SetCliTimeOut(Configuration.Timeout);
                IsConnected = false;
            }
		}

而在action返回的回调函数上来切换金正接口。


<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"></span><pre name="code" class="csharp">public EntityResponse<DataTable> ExecuteCommand(SZKingdomRequest request, List<SZKingdomArgument> arguments)
		{
			try
			{
				EntityResponse<DataTable> result = Retry.Do(() => ExecuteInternal(request, arguments), TimeSpan.FromMilliseconds(10), 1, exception =>
				{
					_wrapper.Disconnect();
                    //_connectionOptions = SZKingdomPool.GetAvailableSZKingdom();
                    //_wrapper.SetConnectionOption(_connectionOptions);
                    _collections = SZKingdomPool.GetAvailableSZKingdom();
                    foreach (KeyValuePair<KCBPConnectionOptions, SZKingdomConfiguration> kv in _collections)
                    {
                        _connectionOptions = kv.Key;
                        Configuration = kv.Value;
                    }
                    _wrapper.SetConnectionOption(_connectionOptions);
                    _wrapper.SetCliTimeOut(Configuration.Timeout);
                    IsConnected = false;
           
				});


				return result;
			}
			catch (AggregateException exception)
			{
				KCBPLibraryWrapperException inner =
					exception.InnerExceptions.OfType<KCBPLibraryWrapperException>().FirstOrDefault();
				if (inner == null)
				{
					throw;
				}
                throw new Exception("金正服务暂时不可用");
                //return EntityResponse<DataTable>.Error(ErrorCode.SZKingdomLibraryError,
                //    string.Format("KCBP error code: {0}. Message: {1}.", inner.ErrorCode, inner.Message));
			}
		}



                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值