WCF _ example

        private static ChannelFactory<InterDataServiceChannel> _factory;
        private static object _lock = new object();

        private InterDataServiceClient _client = null;
        ILogBase _logBase;
        public ClientHelper(ILogBase logBase)
        {
            _logBase = logBase;
        }

        public virtual void Dispose()
        {
            CloseChannel();
            CloseFactory();
        }

        protected void CloseChannel()
        {
            lock (_lock)
            {
                if (_client != null)
                {

                    try
                    {
                        _client.Close();
                    }
                    catch (TimeoutException tmEx/* timeout */)
                    {
                        _logBase.Error($"CloseChannel TimeoutException :{tmEx.Message}", tmEx);
                        // Handle the timeout exception
                        _client.Abort();
                    }
                    catch (CommunicationException ccEx /* communicationException */)
                    {
                        _logBase.Error($"CloseChannel CommunicationException :{ccEx.Message}", ccEx);
                        _client.Abort();
                    }
                    catch (Exception e)
                    {
                        _logBase.Error($"CloseChannel Exception :{e.Message}", e);
                        _client.Abort();
                        throw ;
                    }

                    _client = null;
                }
            }
        }

        protected void CloseFactory()
        {
            lock (_lock)
            {
                if (_factory!=null)
                {
                    try
                    {
                        _factory.Close();
                    }
                    catch (TimeoutException tmEx/* timeout */)
                    {
                        _logBase.Error($"CloseFactory TimeoutException :{tmEx.Message}", tmEx);
                        // Handle the timeout exception
                        _factory.Abort();
                    }
                    catch (CommunicationException ccEx/* communicationException */)
                    {
                        _logBase.Error($"CloseFactory TimeoutException :{ccEx.Message}", ccEx);
                        // Handle the communication exception
                        _factory.Abort();
                    }
                    catch(Exception e)
                    {
                        _logBase.Error($"CloseFactory Exception :{e.Message}", e);
                        throw;
                    }
                }
                _factory = null;
            }
        }

        private void CreateFactory()
        {
            // ... set up custom bindings here and get some config values
            var endpoint = GetEndpointAddr();
            var binding = GetBindingForEndpoint();
            _factory = new ChannelFactory<InterDataServiceChannel>(binding, endpoint);
        }

        protected ChannelFactory<InterDataServiceChannel> Factory
        {
            get
            {
                if (_factory == null )
                {
                    // ... set up custom bindings here and get some config values
                    CreateFactory();
                }
                else if(_factory.State != CommunicationState.Opening)
                {
                    CloseFactory();
                    CreateFactory();
                }
                return _factory;
            }
        }

        private void CreateClient()
        {
            _client = (InterDataServiceClient)Factory.CreateChannel();
            SetClientCredential(_client.ClientCredentials.Windows.ClientCredential);
        }

        protected InterDataServiceClient Client
        {
            get
            {
                
                if (_client == null)
                {
                    CreateClient();
                }
                else
                {
                    if (_client.State != CommunicationState.Opening)
                    {
                        CloseChannel();
                    }
                    CreateClient();
                }
                return _client;
            }
        }

        public InterDataServiceClient GetDefaultOAClient()
        {
            return Client;
        }

 

上一篇:js 获取select的值 / js动态给select赋值


下一篇:【TcaplusDB知识库】数据分批返回示例代码