Est-il possible d'exécuter des commandes SQL et d'envoyer des messages MSMQ dans un TransactionScope?

StackOverflow https://stackoverflow.com/questions/251050

  •  05-07-2019
  •  | 
  •  

Question

J'enquête sur l'utilisation de MSMQ pour le nouveau projet de mon équipe, mais je souhaite savoir si je peux envoyer des messages MSMQ et exécuter des commandes SQL dans un System.Transactions.TransactionScope et les faire valider ou annuler simultanément. Je ne parviens pas à trouver une source fiable en ligne mentionnant "oui". avec des exemples de code.

Je dois envoyer des messages à une seule file d'attente et insérer des enregistrements dans une base de données unique, mais je dois réussir ou échouer ensemble.

EDIT: Je n'ai pas été en mesure de vérifier si cela fonctionnait ou non lors de mes tests (cette tâche m'a été retirée rapidement), mais toute la documentation indique que TransactionScope capture les messages MSMQ et les commandes SQL dans le même cas.

Était-ce utile?

La solution

Par expérience personnelle, je sais que TransactionScope fonctionne très bien avec SQL. Je ne connais pas trop MSMQ, mais un recherche Google en montre quelques exemples. (normalement des discussions de forum) où il semble que cela fonctionne avec succès. L'objet System.Messaging.MessageQueue a également une propriété .Transactional et la méthode .Send () a un paramètre MessageQueueTransaction. Je dirais donc que tout devrait fonctionner ensemble.

Voici l'exemple de code de l'un des forums de recherche (pas mon code):

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

Lancez simplement votre code SQL dans le bloc using () pour TransactionScope (avant le .Complete ()) et vous devriez être prêt à partir?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top