.NET 7 Verteilte Transaktionen ProblemeC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 .NET 7 Verteilte Transaktionen Probleme

Post by Anonymous »

Ich entwickle eine kleine POC -Anwendung, um die Unterstützung von .NET7 für verteilte Transaktionen zu testen, da dies ein ziemlich wichtiger Aspekt in unserem Workflow ist. Es scheint mir entweder eine Art Fehler in .NET7 oder ich fehlt etwas. /> < /ol>
Ohne Transaktionsbereich Dies funktioniert jedoch gut. Wenn ich das Transaktionsbereich hinzufügt

Code: Select all

TransactionManager.ImplicitDistributedTransactions = true;

ausführbarer Code im Worker -Dienst lautet wie folgt:
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>
Transaktionsbereich wird mit den folgenden Parametern erstellt: < /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>
Code zum Speichern in Datenbank verwendet eine einfache Dapper GenericRepository -Bibliothek: < /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>
Ich musste hier den Umfang verwenden, da das Repository skopiert ist und der Arbeiter Singleton ist, sodass es nicht direkt injiziert werden kann. hängt).
Ohne Transaktionsfernrohr alles funktioniert gut.>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post