Domanda

Sto studiando utilizzando MSMQ per il nuovo progetto del mio team, ma devo sapere se posso inviare messaggi MSMQ ed eseguire comandi SQL all'interno di System.Transactions.TransactionScope e farli commettere o eseguire il rollback insieme. Non riesco a trovare una fonte affidabile online che dica "sì" con esempi di codice.

Devo inviare alcuni messaggi a una singola coda e inserire alcuni record in un singolo database, ma devo riuscire o fallire insieme.

EDIT: non sono stato in grado di verificare effettivamente se questo funziona o meno nei miei test (sono stato espulso rapidamente da questa attività) ma tutta la documentazione afferma che TransactionScope cattura i messaggi MSMQ e i comandi SQL nella stessa istanza.

È stato utile?

Soluzione

Per esperienza personale so che TransactionScope funziona perfettamente con SQL. Non ho troppa familiarità con MSMQ ma una rapida Ricerca Google mostra alcuni esempi (normalmente discussioni nel forum) in cui sembra che funzioni correttamente. L'oggetto System.Messaging.MessageQueue ha anche una proprietà .Transactional e il metodo .Send () ha un parametro MessageQueueTransaction, quindi direi che dovrebbe funzionare insieme.

Ecco l'esempio di codice di uno dei forum nella ricerca (non il mio codice):

using (TransactionScope scope = new TransactionScope())  
{  
    using (MessageQueue myQueue = new MessageQueue(QUEUE_NAME))  
    {  
    if (myQueue.Transactional)  
        {  
        myQueue.Send(TicketTextBox.Text, "Message", MessageQueueTransactionType.Automatic);  
        }  
    }  
scope.Complete();  
}

Basta inserire il codice SQL all'interno del blocco using () per TransactionScope (prima di .Complete ()) e dovresti essere pronto?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top