SqlWorkflowPersistenceService e DTC: mistero svelato

L’altro giorno, poco prima della mia sessione su Workflow all’evento .netSide, la mia demo aveva smesso di funzionare. In poche parole, aveva smesso di persistere il Workflow sul Data Base, nonostante funzionasse ancora il tracking e la gestione della parte applicativa (i ticket). In pratica, non era un problema del DB.

Ho indagato un po (dovevo far funzionare la demo) e socprì che aveva smesso di funzionare il servizio DTC (Distributed Transaction Coordinator). Maggiori info sui “momenti di panico” in questo post.
Sul momento non indagai. C’era l’evento da fare ed andavamo tutti di fretta.
Oggi, con un attimo di calma, mi ci sono dedicato ed ho svelato il piccolo mistero.

Ieri sera, mentre scrivevo l’articolo per .netSide, quello che ha acceso la lampadina è stata l’interfaccia IPendingWorks che, cito dalla documentazione ufficiale:

“The IPendingWork interface is provided for services that want to participate in the workflow runtime batching mechanism. The batching mechanism is especially useful for services that use a durable store. It is often important in these cases to maintain consistency between the durable store used by the service and the internal state of the workflow runtime.

If you want your service to participate in workflow transaction batching provided by the TransactionService, you must implement the methods defined by the IPendingWork interface. Then you can add work items to the CurrentBatch. The workflow runtime will call the Commit method on your service to commit the batch.

The SqlStatePersistenceService and SqlTimerService both implement the IPendingWork interface.”

Bingo! Mi sono detto!
TrasactionService–>System.Transaction–>Distributed Transaction Coordinator!
Tant’è che, in questo articolo di MSDN, si legge chiaramente che:

“In the .NET Framework, distributed transactions are managed through the API in the System.Transactions namespace. The System.Transactions API will delegate distributed transaction handling to a transaction monitor such as the Microsoft Distributed Transaction Coordinator (MS DTC) when multiple persistent resource managers are involved. For more information, see Transaction Fundamentals

Arcano svelato. Ora posso dormire tranquillo!