public async Task <TCommandResult> ExecuteAsync(IConnection connection, CancellationToken cancellationToken)
        {
            var message = CreateCommandMessage(connection.Description);

            try
            {
                await connection.SendMessageAsync(message, _messageEncoderSettings, cancellationToken).ConfigureAwait(false);
            }
            finally
            {
                MessageWasProbablySent(message);
            }

            if (message.WrappedMessage.ResponseExpected)
            {
                var encoderSelector = new CommandResponseMessageEncoderSelector();
                var response        = (CommandResponseMessage)await connection.ReceiveMessageAsync(message.RequestId, encoderSelector, _messageEncoderSettings, cancellationToken).ConfigureAwait(false);

                return(ProcessResponse(connection.ConnectionId, response.WrappedMessage));
            }
            else
            {
                return(default(TCommandResult));
            }
        }
示例#2
0
        // public methods
        public TCommandResult Execute(IConnection connection, CancellationToken cancellationToken)
        {
            try
            {
                var message = CreateCommandMessage(connection.Description);

                try
                {
                    connection.SendMessage(message, _messageEncoderSettings, cancellationToken);
                }
                finally
                {
                    MessageWasProbablySent(message);
                }

                if (message.WrappedMessage.ResponseExpected)
                {
                    var encoderSelector = new CommandResponseMessageEncoderSelector();
                    var response        = (CommandResponseMessage)connection.ReceiveMessage(message.RequestId, encoderSelector, _messageEncoderSettings, cancellationToken);
                    return(ProcessResponse(connection.ConnectionId, response.WrappedMessage));
                }
                else
                {
                    return(default(TCommandResult));
                }
            }
            catch (MongoException exception) when(ShouldAddTransientTransactionError(exception))
            {
                exception.AddErrorLabel("TransientTransactionError");
                throw;
            }
        }
示例#3
0
        private CompressedMessageBinaryEncoder CreateSubject(Stream stream, params CompressorConfiguration[] compressors)
        {
            var compressorSource = GetCompressorSource(compressors);
            var encoderSelector  = new CommandResponseMessageEncoderSelector();
            var subject          = new CompressedMessageBinaryEncoder(stream, encoderSelector, compressorSource, _messageEncoderSettings);

            return(subject);
        }
        public async Task <TCommandResult> ExecuteAsync(IConnection connection, CancellationToken cancellationToken)
        {
            try
            {
                bool responseExpected;
                int  responseTo;
                if (_moreToCome)
                {
                    responseExpected = true;
                    responseTo       = _previousRequestId;
                }
                else
                {
                    var message = CreateCommandMessage(connection.Description);
                    message = await AutoEncryptFieldsIfNecessaryAsync(message, connection, cancellationToken).ConfigureAwait(false);

                    try
                    {
                        await connection.SendMessageAsync(message, _messageEncoderSettings, cancellationToken).ConfigureAwait(false);
                    }
                    finally
                    {
                        if (message.WasSent)
                        {
                            MessageWasProbablySent(message);
                        }
                    }

                    responseExpected = message.WrappedMessage.ResponseExpected;
                    responseTo       = message.RequestId;
                }

                if (responseExpected)
                {
                    var encoderSelector = new CommandResponseMessageEncoderSelector();
                    var response        = (CommandResponseMessage)await connection.ReceiveMessageAsync(responseTo, encoderSelector, _messageEncoderSettings, cancellationToken).ConfigureAwait(false);

                    SaveResponseInfo(response);
                    response = await AutoDecryptFieldsIfNecessaryAsync(response, cancellationToken).ConfigureAwait(false);

                    return(ProcessResponse(connection.ConnectionId, response.WrappedMessage));
                }
                else
                {
                    return(default(TCommandResult));
                }
            }
            catch (Exception exception)
            {
                AddErrorLabelIfRequired(exception, connection.Description?.MaxWireVersion);

                TransactionHelper.UnpinServerIfNeededOnCommandException(_session, exception);
                throw;
            }
        }
示例#5
0
        // public methods
        public TCommandResult Execute(IConnection connection, CancellationToken cancellationToken)
        {
            var message = CreateCommandMessage(connection.Description);

            connection.SendMessage(message, _messageEncoderSettings, cancellationToken);
            MessageWasSent();

            var encoderSelector = new CommandResponseMessageEncoderSelector();
            var response        = (CommandResponseMessage)connection.ReceiveMessage(message.RequestId, encoderSelector, _messageEncoderSettings, cancellationToken);

            return(ProcessResponse(connection.ConnectionId, response.WrappedMessage));
        }
        public async Task <TCommandResult> ExecuteAsync(IConnection connection, CancellationToken cancellationToken)
        {
            try
            {
                var message = CreateCommandMessage(connection.Description);
                message = await AutoEncryptFieldsIfNecessaryAsync(message, connection, cancellationToken).ConfigureAwait(false);

                try
                {
                    await connection.SendMessageAsync(message, _messageEncoderSettings, cancellationToken).ConfigureAwait(false);
                }
                finally
                {
                    if (message.WasSent)
                    {
                        MessageWasProbablySent(message);
                    }
                }

                if (message.WrappedMessage.ResponseExpected)
                {
                    var encoderSelector = new CommandResponseMessageEncoderSelector();
                    var response        = (CommandResponseMessage)await connection.ReceiveMessageAsync(message.RequestId, encoderSelector, _messageEncoderSettings, cancellationToken).ConfigureAwait(false);

                    response = await AutoDecryptFieldsIfNecessaryAsync(response, cancellationToken).ConfigureAwait(false);

                    return(ProcessResponse(connection.ConnectionId, response.WrappedMessage));
                }
                else
                {
                    return(default(TCommandResult));
                }
            }
            catch (Exception exception)
            {
                if (exception is MongoException mongoException && ShouldAddTransientTransactionError(mongoException))
                {
                    mongoException.AddErrorLabel("TransientTransactionError");
                }
                TransactionHelper.UnpinServerIfNeededOnCommandException(_session, exception);
                throw;
            }
        }
        // public methods
        public TCommandResult Execute(IConnection connection, CancellationToken cancellationToken)
        {
            try
            {
                var message = CreateCommandMessage(connection.Description);
                message = AutoEncryptFieldsIfNecessary(message, connection, cancellationToken);

                try
                {
                    connection.SendMessage(message, _messageEncoderSettings, cancellationToken);
                }
                finally
                {
                    if (message.WasSent)
                    {
                        MessageWasProbablySent(message);
                    }
                }

                if (message.WrappedMessage.ResponseExpected)
                {
                    var encoderSelector = new CommandResponseMessageEncoderSelector();
                    var response        = (CommandResponseMessage)connection.ReceiveMessage(message.RequestId, encoderSelector, _messageEncoderSettings, cancellationToken);
                    response = AutoDecryptFieldsIfNecessary(response, cancellationToken);
                    return(ProcessResponse(connection.ConnectionId, response.WrappedMessage));
                }
                else
                {
                    return(default(TCommandResult));
                }
            }
            catch (Exception exception)
            {
                AddErrorLabelIfRequired(exception, connection.Description.ServerVersion);

                TransactionHelper.UnpinServerIfNeededOnCommandException(_session, exception);
                throw;
            }
        }