Getting Started
Architecture
Transports
Persistence
ServiceInsight
ServicePulse
ServiceControl
Monitoring
Samples

Transactional Session with Azure Table Persistence

NuGet Package: NServiceBus.Persistence.AzureTable.TransactionalSession (3.x)
Target Version: NServiceBus 7.x

In order to use the transactional session feature with Azure Table Persistence, add a reference to the NServiceBus.Persistence.AzureTable.TransactionalSession NuGet package.

Configuration

To enable the transactional session feature:

var persistence = config.UsePersistence<AzureTablePersistence>();
persistence.EnableTransactionalSession();

Opening a session

To open a Azure Storage Persistence transactional session:

using var childBuilder = builder.CreateChildBuilder();
var session = childBuilder.Build<ITransactionalSession>();
await session.Open(
        new AzureTableOpenSessionOptions(
            new TableEntityPartitionKey("MyPartitionKey")));

// use the session

await session.Commit();

Configuring the table

The name of the destination table can be specified when opening the session:

using var childBuilder = builder.CreateChildBuilder();
var session = childBuilder.Build<ITransactionalSession>();
await session.Open(
        new AzureTableOpenSessionOptions(
            new TableEntityPartitionKey("MyPartitionKey"),
            new TableInformation("MyTable")));

// use the session

await session.Commit();

Transaction usage

Message and database operations made via the the transactional session are committed together once the session is committed:

await session.Open(
        new AzureTableOpenSessionOptions(
            new TableEntityPartitionKey("MyPartitionKey")));

// add messages to the transaction:
await session.Send(new MyMessage());

// access the database:
var azureTableSession = session.SynchronizedStorageSession.AzureTablePersistenceSession();

await session.Commit();

See the Azure table persistence transactions documentation for further details about using the transaction.

Related Articles