示例#1
0
        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);
            }
        }