private bool ServerConfigRequestState = false; //获取服务端配置读取状态 /// <summary> /// 创建连接 /// </summary> public void CreateConnection() { IWCFHandlerService wcfHandlerService = mChannelFactory.CreateChannel(); mConn.WcfService = wcfHandlerService; string serverConfig = null; AddMessageHeader(wcfHandlerService as IContextChannel, "", (() => { mConn.ClientID = wcfHandlerService.CreateDomain(mConn.ClientName);//创建连接获取ClientID if (ServerConfigRequestState == false) { //重新获取服务端配置,如:是否压缩Json、是否加密Json serverConfig = wcfHandlerService.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 (IsHeartbeat) { //开启发送心跳 if (timer == null) { StartTimer(); } else { timer.Start(); } } else { if (timer != null) { timer.Stop(); } } } if (backConfig != null) { backConfig(IsMessage, MessageTime); } //创建连接成功后回调 if (createconnAction != null) { createconnAction.BeginInvoke(null, null); } }
/// <summary> /// 创建wcf服务连接 /// </summary> /// <param name="mainfrm"></param> public static void CreateConnection(IClientService client) { try { NetTcpBinding binding = new NetTcpBinding("NetTcpBinding_WCFHandlerService"); //binding.OpenTimeout = TimeSpan.FromSeconds(10); //binding.TransferMode = TransferMode.Buffered; DuplexChannelFactory <IWCFHandlerService> mChannelFactory = new DuplexChannelFactory <IWCFHandlerService>(client, binding, System.Configuration.ConfigurationSettings.AppSettings["WCF_endpoint"]); IWCFHandlerService wcfHandlerService = mChannelFactory.CreateChannel(); string routerID; string mProxyID; using (var scope = new OperationContextScope(wcfHandlerService as IContextChannel)) { // 注意namespace必须和ServiceContract中定义的namespace保持一致,默认是:http://tempuri.org //var myNamespace = "http://www.efwplus.cn/"; // 注意Header的名字中不能出现空格,因为要作为Xml节点名。 routerID = Guid.NewGuid().ToString(); var router = System.ServiceModel.Channels.MessageHeader.CreateHeader("routerID", myNamespace, routerID); OperationContext.Current.OutgoingMessageHeaders.Add(router); mProxyID = wcfHandlerService.CreateDomain(getLocalIPAddress()); } if (AppGlobal.cache.Contains("WCFClientID")) { AppGlobal.cache.Remove("WCFClientID"); } if (AppGlobal.cache.Contains("WCFService")) { AppGlobal.cache.Remove("WCFService"); } if (AppGlobal.cache.Contains("ClientService")) { AppGlobal.cache.Remove("ClientService"); } if (AppGlobal.cache.Contains("routerID")) { AppGlobal.cache.Remove("routerID"); } AppGlobal.cache.Add("routerID", routerID); AppGlobal.cache.Add("WCFClientID", mProxyID); AppGlobal.cache.Add("WCFService", wcfHandlerService); AppGlobal.cache.Add("ClientService", client); //开启发送心跳 if (timer == null) { StartTimer(); } else { timer.Start(); } } catch (Exception err) { throw new Exception(err.Message); } }
/// <summary> /// 创建wcf服务连接 /// </summary> /// <param name="mainfrm"></param> public static IWCFHandlerService CreateConnection(IClientService client) { try { //NetTcpBinding binding = new NetTcpBinding("NetTcpBinding_WCFHandlerService"); mChannelFactory = new DuplexChannelFactory <IWCFHandlerService>(client, "myendpoint"); IWCFHandlerService wcfHandlerService = mChannelFactory.CreateChannel(); string routerID; string mProxyID; using (var scope = new OperationContextScope(wcfHandlerService as IContextChannel)) { // 注意namespace必须和ServiceContract中定义的namespace保持一致,默认是:http://tempuri.org routerID = Guid.NewGuid().ToString(); var router = System.ServiceModel.Channels.MessageHeader.CreateHeader("routerID", myNamespace, routerID); OperationContext.Current.OutgoingMessageHeaders.Add(router); mProxyID = wcfHandlerService.CreateDomain(getLocalIPAddress()); if (WcfClientManage.ServerConfigRequestState == false) { //重新获取服务端配置,如:是否压缩Json、是否加密Json string serverConfig = wcfHandlerService.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 (AppGlobal.cache.Contains("WCFClientID")) { AppGlobal.cache.Remove("WCFClientID"); } if (AppGlobal.cache.Contains("WCFService")) { AppGlobal.cache.Remove("WCFService"); } if (AppGlobal.cache.Contains("ClientService")) { AppGlobal.cache.Remove("ClientService"); } if (AppGlobal.cache.Contains("routerID")) { AppGlobal.cache.Remove("routerID"); } AppGlobal.cache.Add("routerID", routerID); AppGlobal.cache.Add("WCFClientID", mProxyID); AppGlobal.cache.Add("WCFService", wcfHandlerService); AppGlobal.cache.Add("ClientService", client); return(wcfHandlerService); } catch (Exception err) { throw new Exception(err.Message); } }