private static void OnReconnectTimerElapsed(object state)
        {
            ClientReliableDuplexSessionChannel channel = (ClientReliableDuplexSessionChannel)state;

            lock (channel.ThisLock)
            {
                if (((channel.State == CommunicationState.Opened) || (channel.State == CommunicationState.Closing)) && !channel.Binder.Connected)
                {
                    channel.Reconnect();
                }
                else
                {
                    channel.clientSession.ResumePolling(channel.OutputConnection.Strategy.QuotaRemaining == 0);
                }
            }
        }
        private static void StartReceivingStatic(object state)
        {
            ClientReliableDuplexSessionChannel channel = (ClientReliableDuplexSessionChannel)state;

            try
            {
                channel.StartReceiving(true);
            }
            catch (Exception exception)
            {
                if (Fx.IsFatal(exception))
                {
                    throw;
                }
                channel.ReliableSession.OnUnknownException(exception);
            }
        }
 public DuplexClientReliableSession(ClientReliableDuplexSessionChannel channel, IReliableFactorySettings settings, FaultHelper helper, UniqueId inputID) : base(channel, settings, (IClientReliableChannelBinder)channel.Binder, helper, inputID)
 {
     this.channel = channel;
 }