async Task SendRawMessage(MessageRow message, SqlConnection connection, SqlTransaction transaction) { try { using (var command = new SqlCommand(sendCommand, connection, transaction)) { message.PrepareSendCommand(command); await command.ExecuteNonQueryAsync().ConfigureAwait(false); } } catch (SqlException ex) { if (ex.Number == 208) { ThrowQueueNotFoundException(ex); } ThrowFailedToSendException(ex); } catch (Exception ex) { ThrowFailedToSendException(ex); } }
static async Task <MessageReadResult> ReadMessage(SqlCommand command) { // We need sequential access to not buffer everything into memory using (var dataReader = await command.ExecuteReaderAsync(CommandBehavior.SingleRow | CommandBehavior.SequentialAccess).ConfigureAwait(false)) { if (!await dataReader.ReadAsync().ConfigureAwait(false)) { return(MessageReadResult.NoMessage); } return(await MessageRow.Read(dataReader).ConfigureAwait(false)); } }
public Task Send(OutgoingMessage message, TimeSpan timeToBeReceived, SqlConnection connection, SqlTransaction transaction) { var messageRow = MessageRow.From(message.Headers, message.Body, timeToBeReceived); return(SendRawMessage(messageRow, connection, transaction)); }
public Task DeadLetter(MessageRow poisonMessage, SqlConnection connection, SqlTransaction transaction) { return(SendRawMessage(poisonMessage, connection, transaction)); }