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)); } }
// 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; } }
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; } }
// 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; } }