.NET 7 Проблемы с распределенными транзакциямиC#

Место общения программистов C#
Ответить
Anonymous
 .NET 7 Проблемы с распределенными транзакциями

Сообщение Anonymous »

Я разрабатываю небольшое приложение POC для тестирования поддержки .NET7 для распределенных транзакций, поскольку это довольно важный аспект в нашем рабочем процессе. < /p>
Пока я не смог заставить его работать, и я не уверен, почему. Мне кажется, что мне либо какая -то ошибка в .net7, либо что -то упускаю. /> < /ol>
Без объема транзакции это работает нормально, однако, при добавлении объема транзакции меня просят включить поддержку распределенных транзакций с помощью: < /p>

Код: Выделить всё

TransactionManager.ImplicitDistributedTransactions = true;

исполняемый код в рабочей службе следующим образом:
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
int number = 0;
try
{
while (!stoppingToken.IsCancellationRequested)
{
number = number + 1;
using var transactionScope = TransactionUtils.CreateTransactionScope();

await SaveDummyDataIntoTable2Dapper($"saved {number}").ConfigureAwait(false);

await messageSession.Publish(new MyMessage { Number = number }, stoppingToken)
.ConfigureAwait(false);

_logger.LogInformation("Publishing message {number}", number);
_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
transactionScope.Complete();
_logger.LogInformation("Transaction complete");
await Task.Delay(1000, stoppingToken);
}
}
catch (Exception e)
{
_logger.LogError("Exception: {ex}", e);
throw;
}
}
< /code>
Применение транзакции создается со следующими параметрами: < /p>
public class TransactionUtils
{
public static TransactionScope CreateTransactionScope()
{
var transactionOptions = new TransactionOptions();
transactionOptions.IsolationLevel = IsolationLevel.ReadCommitted;
transactionOptions.Timeout = TransactionManager.MaximumTimeout;
return new TransactionScope(TransactionScopeOption.Required, transactionOptions,TransactionScopeAsyncFlowOption.Enabled);
}
}
< /code>
Код для сохранения в базе данных использует простую библиотеку Genericrepository: < /p>
private async Task SaveDummyDataIntoTable2Dapper(string data)
{
using var scope = ServiceProvider.CreateScope();
var mainTableRepository =
scope.ServiceProvider
.GetRequiredService();
await mainTableRepository.InsertAsync(new MainTable()
{
Data = data,
UpdatedDate = DateTime.Now
});
}
< /code>
Я должен был использовать объем здесь, так как репозиторий обладает общего пользования, а работник - это синглтон, поэтому его нельзя вводить непосредственно. < /p>
Я пробовал стойкость с помощью EF Core, а затем, когда вы пытаетесь внести свой затем вешает).
без объема транзакции все работает нормально
Я не уверен, что (если что -то) я здесь не хватает или просто не работает в .net7?>

Подробнее здесь: https://stackoverflow.com/questions/750 ... ons-issues
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»