/// <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); } }
/// <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); } }
/// <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); } }