public RabbitMQTaskQueueRequestContext(Message requestMessage, RabbitMQTaskQueueBinding binding, EndpointAddress localAddress, MessageEncoderFactory msgEncoderFactory, BufferManager bufferManager, IRabbitMQWriter queueWriter, ulong deliveryTag, IRabbitMQReader queueReader, IDisposable readerHandle)
 {
     _opMgr = new ConcurrentOperationManager(GetType().FullName);
     _queueReader = queueReader;
     _readerHandle = readerHandle;
     _deliveryTag = deliveryTag;
     _bufferMgr = bufferManager;
     _msgEncoderFactory = msgEncoderFactory;
     _replyToAddress = localAddress;
     _binding = binding;
     _rqMsg = requestMessage;
     _reply = Reply;
     _queueWriter = queueWriter;
 }
        protected override void OnOpen(TimeSpan timeout)
        {
            MethodInvocationTrace.Write();
            var timeoutTimer = TimeoutTimer.StartNew(timeout);
            base.OnOpen(timeoutTimer.RemainingTime);

            var connFactory = Binding.CreateConnectionFactory(RemoteAddress.Uri.Host, RemoteAddress.Uri.Port);
            var localAddress = new RabbitMQTaskQueueUri(LocalAddress.Uri.ToString());
            var setup = new RabbitMQReaderSetup
            {
                CancelToken = ConcurrentOperationManager.Token,
                ConnectionFactory = connFactory,
                DeleteQueueOnClose = true,
                Exchange = Binding.Exchange,
                IsDurable = Binding.IsDurable,
                MaxPriority = Binding.MaxPriority,
                Options = Binding.ReaderOptions,
                QueueName = localAddress.QueueName,
                QueueTimeToLive = Binding.ReplyQueueTimeToLive,
                Timeout = timeoutTimer.RemainingTime,
            };
            setup.QueueArguments = new Dictionary<string, object>();
            setup.QueueArguments.Add(TaskQueueReaderQueueArguments.IsTaskInputQueue, false);
            setup.QueueArguments.Add(TaskQueueReaderQueueArguments.Scheme, Constants.Scheme);
            _queueReader = Binding.QueueReaderWriterFactory.CreateReader(setup);
        }