/// <summary>
        /// 测试服务连接方法
        /// </summary>
        /// <param name="ip">服务器IP</param>
        /// <param name="port">服务器端口</param>
        /// <param name="name">服务器名称</param>
        /// <returns></returns>
        public bool TestConnection(string ip, int port, string name)
        {
            bool falg = false;

            try
            {
                using (DoOrderClient doOrderclient = GetClient(ip, port, name))
                {
                    string s = doOrderclient.CheckChannel();
                    if (!string.IsNullOrEmpty(s))
                    {
                        falg = true;
                    }
                }
            }
            catch (Exception ex)
            {
                string      errCode = "GL-8001";
                string      errMsg  = "检测撮合中心连接失败!ip为" + ip;
                VTException vte     = new VTException(errCode, errMsg, ex);
                LogHelper.WriteError(vte.ToString(), vte.InnerException);
                throw vte;
            }
            return(falg);
        }
Beispiel #2
0
        /// <summary>
        ///  同1秒钟1个帐户同下1000笔单调用的方法
        /// </summary>
        private void XhOrderTest()
        {
            //DoOrderClient doOrderClient = new DoOrderClient();
            string xhOrderID = string.Empty;

            //下1000笔单
            if (stockOrderRequest != null)
            {
                DoOrderClient doOrderClient = new DoOrderClient();
                DateTime      startTime     = DateTime.Now;

                xhOrderID = doOrderClient.DoStockOrder(stockOrderRequest).OrderId;

                DateTime endTime  = DateTime.Now;
                TimeSpan timeSpan = endTime - startTime;
                int      span     = timeSpan.Milliseconds;
                // allTimeSeconds += span;
                //把毫秒换算成秒
                //int allTimeS = span/1000;
                //把每笔单的时间添加到list中
                addTimeList.Add(span);

                if (!string.IsNullOrEmpty(xhOrderID))
                {
                    UpdateVaule(xhOrderID); //调用委托方法
                }
            }
        }
        private void btnDoOrder_Click(object sender, EventArgs e)
        {
            DoOrderClient doc = new DoOrderClient("NetTcpBinding_IDoOrder", System.Configuration.ConfigurationSettings.AppSettings["serviceAddress"]);

            ProcessDoOrderHandler doh = new ProcessDoOrderHandler(this.ProcessDoOrder);

            doh.BeginInvoke(int.Parse(textBox1.Text), doc, this.cbfx.SelectedIndex, null, null);
        }
 void ProcessDoOrder(int iOrderCount, DoOrderClient client, int selectIndex)
 {
     for (int i = 0; i < iOrderCount; i++)
     {
         OrderResponse or = client.DoStockOrder(BuildOrder(selectIndex));
         MessageDisplayHelper.Event("OrderID:" + or.OrderId + " Message:" + or.OrderMessage, this.listBox1);
     }
 }
        /// <summary>
        /// 获取客户端连接
        /// </summary>
        /// <param name="ip">服务器IP</param>
        /// <param name="port">服务器端口</param>
        /// <param name="name">服务器名称</param>
        /// <returns></returns>
        private DoOrderClient GetClient(string ip, int port, string name)
        {
            DoOrderClient doOrderclient;

            try
            {
                EndpointAddress tcpAddress = new EndpointAddress(string.Format("net.tcp://{0}:{1}/{2}", ip, port, name));
                doOrderclient = new DoOrderClient(endpiontConfigurationName, tcpAddress);
            }
            catch (Exception ex)
            {
                string      errCode = "GL-8000";
                string      errMsg  = "无法获取撮合中心提供的服务[IDoOrder],IP为:" + ip;
                VTException vte     = new VTException(errCode, errMsg, ex);
                LogHelper.WriteError(vte.ToString(), vte.InnerException);
                throw vte;
            }
            return(doOrderclient);
        }
        /// <summary>
        /// 创建下单通道实例
        /// </summary>
        /// <param name="strRemotingServiceAddress"></param>
        /// <param name="strMessage"></param>
        /// <returns></returns>
        private DoOrderClient CreateDoOrderChannel(string strRemotingServiceAddress, ref string strMessage)
        {
            DoOrderClient resultObj = null;

            try
            {
                LogHelper.WriteDebug(string.Format("ServiceChannelManger.CreateDoOrderChannel[{0}]",
                                                   strRemotingServiceAddress));
                resultObj = new DoOrderClient(this._strDoOrderConfigurationSectionName, strRemotingServiceAddress);
                ICommunicationObject co = resultObj;
                co.Faulted +=
                    DoOrderChannelFaultEvent;
            }
            catch (Exception ex)
            {
                strMessage = "GT-2161:[报盘处理]创建下单通道实例异常";
                resultObj  = null;
                LogHelper.WriteError(strMessage, ex);
            }
            return(resultObj);
        }
Beispiel #7
0
        public bool Initialize(string _channelID)
        {
            bool result = false;

            try
            {
                doOrderClient = new DoOrderClient();
                ICommunicationObject co1 = doOrderClient;
                co1.Faulted += CO_Faulted;

                traderFindClient = new TraderFindClient();
                ICommunicationObject co2 = traderFindClient;
                co2.Faulted += CO2_Faulted;

                OrderCallBack callBack = new OrderCallBack();
                rptClient = new OrderDealRptClient(new InstanceContext(callBack));
                ICommunicationObject co3 = rptClient;
                co3.Faulted += CO3_Faulted;

                accountClient = new AccountAndCapitalManagementClient();
                ICommunicationObject co4 = accountClient;
                co4.Faulted += co4_Faulted;

                //hkTraderQueryClient = new HKTraderQueryClient();
                //ICommunicationObject co5 = hkTraderQueryClient;
                //co5.Faulted += co5_Faulted;

                hkTraderFindClient = new HKTraderFindClient();
                ICommunicationObject co6 = hkTraderFindClient;
                co6.Faulted += co6_Faulted;

                hkTraderQueryClient = new HKTraderQuerySevice.HKTraderQueryClient();

                commonQueryClient = new TraderQueryClient();

                IsServiceOk = true;
                if (string.IsNullOrEmpty(_channelID))
                {
                    Channelid = ServerConfig.ChannelID;
                    if (string.IsNullOrEmpty(Channelid))
                    {
                        Channelid = CommUtils.GetMacAddress();
                        ServerConfig.ChannelID = Channelid;
                    }
                }
                else
                {
                    Channelid = _channelID;
                }
                result = rptClient.RegisterChannel(Channelid);

                if (result)
                {
                    string msg = "WCF Service [DoOrderService] is connected! " + DateTime.Now;
                    WriteMsg(msg);

                    string msg2 = "WCF Service [TradeFindService] is connected! " + DateTime.Now;
                    WriteMsg(msg2);

                    string msg3 = "WCF Service [DoDealRptService] is connected! " + DateTime.Now;
                    WriteMsg(msg3);

                    WriteMsg("");
                }
                else
                {
                    IsServiceOk = false;
                }

                if (IsServiceOk)
                {
                    timer          = new Timer();
                    timer.Interval = 10 * 1000;
                    timer.Elapsed += CheckRptChannel;
                    timer.Enabled  = true;
                }
            }
            catch (Exception ex)
            {
                LogHelper.WriteError(ex.Message, ex);
            }

            return(result);
        }
        /// <summary>
        /// 创建报盘通道,每一个服务地址维护一个实例
        /// 即一个撮合中心一个下单连接
        /// </summary>
        /// <param name="strIp">服务器</param>
        /// <param name="strPort">服务器端口</param>
        /// <param name="strDoOrderServiceName">下单服务名</param>
        /// <param name="strDealRptServiceName">成交回送服务名</param>
        ///  <param name="state">成交回送通道状态</param>
        /// <param name="strMessage"></param>
        /// <returns>报盘通道实例</returns>
        public DoOrderClient GetDoOrderChannel(string strIp, string strPort,
                                               string strDoOrderServiceName, string strDealRptServiceName,
                                               ref ChannelState state, ref string strMessage)
        {
            LogHelper.WriteDebug("ServiceChannelManger.GetDoOrderChannel");
            DoOrderClient resultObj = null;

            if (_wcfDoOrderChannelList != null)
            {
                var strDoOrderAddress = string.Format("net.tcp://{0}:{1}/{2}", strIp, strPort, strDoOrderServiceName);

                string strPort2 = "";
                try
                {
                    int dealPort = int.Parse(strPort);
                    dealPort++;
                    strPort2 = dealPort.ToString();
                }
                catch (Exception ex)
                {
                    LogHelper.WriteError(ex.Message, ex);
                    strPort2 = strPort;
                }

                var strDealRptAddress = string.Format("net.tcp://{0}:{1}/{2}", strIp, strPort2,
                                                      strDealRptServiceName);

                _wcfDealRptChannelListLock.EnterUpgradeableReadLock();
                try
                {
                    //如果缓存中没有,那么新建
                    if (!_wcfDoOrderChannelList.TryGetValue(strDoOrderAddress, out resultObj))
                    {
                        _wcfDealRptChannelListLock.EnterWriteLock();
                        try
                        {
                            var doOrderChannel = CreateDoOrderChannel(strDoOrderAddress, ref strMessage);
                            if (doOrderChannel != null)
                            {
                                resultObj = doOrderChannel;
                                _wcfDoOrderChannelList[strDoOrderAddress] = doOrderChannel;

                                var dealBackChannel = this.CreateDealRptChannel(strDealRptAddress, ref strMessage);
                                if (dealBackChannel != null)
                                {
                                    _wcfDealRptChannelList[strDealRptAddress] = new DealRptChannelState(dealBackChannel,
                                                                                                        ChannelState.
                                                                                                        CSNormal,
                                                                                                        strDealRptAddress);
                                }
                            }
                        }
                        finally
                        {
                            _wcfDealRptChannelListLock.ExitWriteLock();
                        }
                    }
                    else
                    {
                        if (resultObj != null &&
                            ((_wcfDealRptChannelList[strDealRptAddress].State == ChannelState.CSError) ||
                             (resultObj.State == CommunicationState.Faulted ||
                              resultObj.State == CommunicationState.Closed)))
                        {
                            _wcfDealRptChannelListLock.EnterWriteLock();
                            try
                            {
                                LogHelper.WriteInfo("ServiceChannelManager.GetDoOrderChannel下单通道出错,状态为" +
                                                    resultObj.State);
                                RemoveDoOrderAndRptChannel(strDoOrderAddress, strDealRptAddress);

                                resultObj = null;
                            }
                            finally
                            {
                                _wcfDealRptChannelListLock.ExitWriteLock();
                            }
                        }
                    }
                }
                finally
                {
                    _wcfDealRptChannelListLock.ExitUpgradeableReadLock();
                }

                #region old code

                //lock (((ICollection) _wcfDealRptChannelList).SyncRoot)
                //{
                //    var strDoOrderAddress = string.Format("net.tcp://{0}:{1}/{2}", strIp, strPort, strDoOrderServiceName);

                //    string strPort2 = "";
                //    try
                //    {
                //        int dealPort = int.Parse(strPort);
                //        dealPort++;
                //        strPort2 = dealPort.ToString();
                //    }
                //    catch (Exception ex)
                //    {
                //        LogHelper.WriteError(ex.Message, ex);
                //        strPort2 = strPort;
                //    }

                //    var strDealRptAddress = string.Format("net.tcp://{0}:{1}/{2}", strIp, strPort2,
                //                                          strDealRptServiceName);

                //    //如果缓存中没有,那么新建
                //    if (!_wcfDoOrderChannelList.ContainsKey(strDoOrderAddress))
                //    {
                //        var doOrderChannel = CreateDoOrderChannel(strDoOrderAddress, ref strMessage);
                //        if (doOrderChannel != null)
                //        {
                //            resultObj = doOrderChannel;
                //            _wcfDoOrderChannelList[strDoOrderAddress] = doOrderChannel;

                //            var dealBackChannel = this.CreateDealRptChannel(strDealRptAddress, ref strMessage);
                //            if (dealBackChannel != null)
                //            {
                //                _wcfDealRptChannelList[strDealRptAddress] = new DealRptChannelState(dealBackChannel,
                //                                                                                    ChannelState.
                //                                                                                        CSNormal,
                //                                                                                    strDealRptAddress);
                //            }
                //        }
                //    }
                //        //if (_wcfDoOrderChannelList.ContainsKey(strDoOrderAddress))
                //    else
                //    {
                //        resultObj = _wcfDoOrderChannelList[strDoOrderAddress];

                //        if (resultObj != null &&
                //            ((_wcfDealRptChannelList[strDealRptAddress].State == ChannelState.CSError) ||
                //             (resultObj.State == CommunicationState.Faulted ||
                //              resultObj.State == CommunicationState.Closed)))
                //        {
                //            //_wcfDoOrderChannelList.Remove(strDoOrderAddress);
                //            //_wcfDealRptChannelList.Remove(strDealRptAddress);
                //            LogHelper.WriteDebug("ServiceChannelManager.GetDoOrderChannel下单通道出错,状态为" + resultObj.State);
                //            RemoveDoOrderAndRptChannel(strDoOrderAddress, strDealRptAddress);

                //            resultObj = null;
                //        }
                //    }
                //}

                #endregion
            }
            return(resultObj);
        }