Ejemplo n.º 1
0
        /// <summary>
        /// 重新连接wcf服务
        /// </summary>
        /// <param name="mainfrm"></param>
        public static void ReConnection()
        {
            try
            {
                NetTcpBinding binding = new NetTcpBinding("NetTcpBinding_WCFHandlerService");
                //binding.OpenTimeout = TimeSpan.FromSeconds(10);
                //binding.TransferMode = TransferMode.Buffered;
                DuplexChannelFactory <IWCFHandlerService> mChannelFactory = new DuplexChannelFactory <IWCFHandlerService>(AppGlobal.cache.GetData("ClientService") as IClientService, binding, System.Configuration.ConfigurationSettings.AppSettings["WCF_endpoint"]);
                IWCFHandlerService wcfHandlerService = mChannelFactory.CreateChannel();

                using (var scope = new OperationContextScope(wcfHandlerService as IContextChannel))
                {
                    var router = System.ServiceModel.Channels.MessageHeader.CreateHeader("routerID", myNamespace, AppGlobal.cache.GetData("routerID").ToString());
                    OperationContext.Current.OutgoingMessageHeaders.Add(router);
                    wcfHandlerService.Heartbeat(AppGlobal.cache.GetData("WCFClientID").ToString());
                }

                if (AppGlobal.cache.Contains("WCFService"))
                {
                    AppGlobal.cache.Remove("WCFService");
                }
                AppGlobal.cache.Add("WCFService", wcfHandlerService);
            }
            catch (Exception err)
            {
                throw new Exception(err.Message);
            }
        }
        /// <summary>
        /// 发送心跳
        /// </summary>
        /// <returns></returns>
        public static bool Heartbeat()
        {
            try
            {
                bool ret = false;
                IWCFHandlerService _wcfService = AppGlobal.cache.GetData("WCFService") as IWCFHandlerService;
                using (var scope = new OperationContextScope(_wcfService as IContextChannel))
                {
                    var router = System.ServiceModel.Channels.MessageHeader.CreateHeader("routerID", myNamespace, AppGlobal.cache.GetData("routerID").ToString());
                    OperationContext.Current.OutgoingMessageHeaders.Add(router);
                    ret = _wcfService.Heartbeat(AppGlobal.cache.GetData("WCFClientID").ToString());

                    if (WcfClientManage.ServerConfigRequestState == false)
                    {
                        //重新获取服务端配置,如:是否压缩Json、是否加密Json
                        string serverConfig = _wcfService.ServerConfig();
                        WcfClientManage.IsHeartbeat      = serverConfig.Split(new char[] { '#' })[0] == "1" ? true : false;
                        WcfClientManage.HeartbeatTime    = Convert.ToInt32(serverConfig.Split(new char[] { '#' })[1]);
                        WcfClientManage.IsMessage        = serverConfig.Split(new char[] { '#' })[2] == "1" ? true : false;
                        WcfClientManage.MessageTime      = Convert.ToInt32(serverConfig.Split(new char[] { '#' })[3]);
                        WcfClientManage.IsCompressJson   = serverConfig.Split(new char[] { '#' })[4] == "1" ? true : false;
                        WcfClientManage.IsEncryptionJson = serverConfig.Split(new char[] { '#' })[5] == "1" ? true : false;

                        if (WcfClientManage.IsHeartbeat)
                        {
                            //开启发送心跳
                            if (timer == null)
                            {
                                StartTimer();
                            }
                            else
                            {
                                timer.Start();
                            }
                        }
                        else
                        {
                            if (timer != null)
                            {
                                timer.Stop();
                            }
                        }
                        WcfClientManage.ServerConfigRequestState = true;
                    }
                }

                if (ret == false)            //表示服务主机关闭过,丢失了clientId,必须重新创建连接
                {
                    mChannelFactory.Abort(); //关闭原来通道
                    CreateConnection(AppGlobal.cache.GetData("ClientService") as IClientService);
                }
                return(ret);
            }
            catch
            {
                WcfClientManage.ServerConfigRequestState = false;
                ReConnection(false);//连接服务主机失败,重连
                return(false);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 发送心跳
        /// </summary>
        /// <returns></returns>
        public static bool Heartbeat()
        {
            try
            {
                bool ret = false;
                IWCFHandlerService _wcfService = AppGlobal.cache.GetData("WCFService") as IWCFHandlerService;
                using (var scope = new OperationContextScope(_wcfService as IContextChannel))
                {
                    var router = System.ServiceModel.Channels.MessageHeader.CreateHeader("routerID", myNamespace, AppGlobal.cache.GetData("routerID").ToString());
                    OperationContext.Current.OutgoingMessageHeaders.Add(router);
                    ret = _wcfService.Heartbeat(AppGlobal.cache.GetData("WCFClientID").ToString());
                }

                if (ret == false)//表示服务主机关闭过,丢失了clientId,必须重新创建连接
                {
                    CreateConnection(AppGlobal.cache.GetData("ClientService") as IClientService);
                }
                return(ret);
            }
            catch
            {
                ReConnection();//连接服务主机失败,重连
                return(false);
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 发送心跳
        /// </summary>
        /// <returns></returns>
        private bool Heartbeat()
        {
            IWCFHandlerService _wcfService = mConn.WcfService;

            try
            {
                bool   ret          = false;
                string serverConfig = null;
                AddMessageHeader(_wcfService as IContextChannel, "", (() =>
                {
                    ret = _wcfService.Heartbeat(mConn.ClientID);
                    if (ServerConfigRequestState == false)
                    {
                        //重新获取服务端配置,如:是否压缩Json、是否加密Json
                        serverConfig = _wcfService.ServerConfig();
                        ServerConfigRequestState = true;
                    }
                }));

                if (!string.IsNullOrEmpty(serverConfig))
                {
                    IsHeartbeat      = serverConfig.Split(new char[] { '#' })[0] == "1" ? true : false;
                    HeartbeatTime    = Convert.ToInt32(serverConfig.Split(new char[] { '#' })[1]);
                    IsMessage        = serverConfig.Split(new char[] { '#' })[2] == "1" ? true : false;
                    MessageTime      = Convert.ToInt32(serverConfig.Split(new char[] { '#' })[3]);
                    IsCompressJson   = serverConfig.Split(new char[] { '#' })[4] == "1" ? true : false;
                    IsEncryptionJson = serverConfig.Split(new char[] { '#' })[5] == "1" ? true : false;
                    serializeType    = (SerializeType)Convert.ToInt32(serverConfig.Split(new char[] { '#' })[6]);

                    if (backConfig != null)
                    {
                        backConfig(IsMessage, MessageTime);
                    }

                    if (IsHeartbeat)
                    {
                        //开启发送心跳
                        if (timer == null)
                        {
                            StartTimer();
                        }
                        else
                        {
                            timer.Start();
                        }
                    }
                    else
                    {
                        if (timer != null)
                        {
                            timer.Stop();
                        }
                    }
                }

                if (ret == false)//表示服务主机关闭过,丢失了clientId,必须重新创建连接
                {
                    //mChannelFactory.Abort();//关闭原来通道
                    (_wcfService as IContextChannel).Abort();
                    CreateConnection();
                }
                return(ret);
            }
            catch
            {
                ServerConfigRequestState = false;
                ReConnection(false);//连接服务主机失败,重连
                return(false);
            }
        }