Transactions

In Microsoft® Provisioning Framework (MPF), every request has a corresponding transaction for managing transaction state and rollback. MPF supports three types of transactions for provisioning procedures, as described in the following table.

Transaction Type Procedure Type Description
Standard compensating Read, write, or two-phase Generated for procedures that perform updates subject to rollback. Standard compensating transactions are generated and managed by MPF, using methods in the IProvProvider interface. For write transactions, MPF calls ProcessRequest (for execution) and RollbackRequest (for rollback after a failure). For two-phase transactions, MPF calls ProcessRequest, PrepareRequest, and either CommitRequest or RollbackRequest, depending on the state of the transaction after the prepare.
DTC Read Generated for DTC-compliant providers. Transactions that use the Microsoft® Distributed Transaction Coordinator (DTC) are marked as read and are not logged by a provisioning engine. Currently, the only standard provider that is DTC-compliant is the SQL Provider.

DTC transactions are generated and owned by MPF, but execution and rollback are managed by DTC. MPF uses the property bag of IProvHelper to pass the ITransaction interface to the provider, which then uses this object to enlist in the DTC transaction.

External Read, write, or two-phase Generated for requests received from servers that use Transaction Internet Protocol (TIP). Whenever MPF receives an external request, it automatically enlists the transaction in both MPF and the local DTC (which handles all negotiations with the remote TIP transaction manager). To link the transaction back to the remote server, MPF generates a tipUrl attribute for the request's transactionContext node. A remote server can also enlist into an MPF transaction by having a provider fetch the TIP URL (via the property bag of IProvHelper).

External transactions are owned by the external service and managed by DTC; MPF is just a subscriber to the transaction.

Transactions are generated by provisioning engines. As transactions are processed, a provisioning engine updates a transaction log with the current transaction state. An auditing and recovery manager moves completed transactions that are marked for audit to the audit log.

See Also

Architecture

[an error occurred while processing this directive]