Elaborazione transazionale dei messaggi
Aggiornamento: novembre 2007
L'elaborazione transazionale consente di fare in modo che i messaggi di una transazione vengano recapitati in ordine, solo una volta e recuperati correttamente dalla coda di destinazione. È possibile utilizzare il componente MessageQueue per inviare e ricevere messaggi in modo transazionale. L'invio di un messaggio in una transazione presuppone il raggruppamento di una serie di messaggi correlati. La transazione può essere considerata completata quando tutti i messaggi in essa contenuti vengono recapitati insieme nell'ordine in cui sono stati inviati o annullata quando l'invio o la ricezione non viene effettuata automaticamente a causa di un problema.
Dalle applicazioni è possibile creare due tipi principali di transazione:
Transazioni interne, utilizzate per inviare messaggi fra due o più risorse di Accodamento messaggi, ovvero fra due code appartenenti a una rete enterprise di accodamento messaggi.
Transazioni esterne, utilizzate per inviare messaggi fra code e altre risorse, ad esmpio database.
Transazioni interne e transazioni esterne differiscono per modello di programmazione, gestore di risorse utilizzato per regolare la transazione e criteri di utilizzo.
Transazioni interne
Le transazioni interne vengono eseguite mediante la creazione di un'istanza della classe MessageQueueTransaction e la relativa associazione a un'istanza del componente MessageQueue. Una transazione interna rappresenta il tipo più semplice di transazione. I messaggi vengono inviati tra una o più code di messaggi e il coordinatore delle transazioni di Accodamento messaggi regola le azioni che vengono eseguite. Dal momento che queste fasi vengono controllate manualmente nel processo, le transazioni interne possono essere considerate manuali o esplicite, a differenza di quelle esterne che sono automatiche o implicite.
Il modello di programmazione delle transazioni interne è molto semplice: è necessario chiamare il metodo Begin della classe MessageQueueTransaction e passare un'istanza di tale classe al metodo di invio o ricezione. Chiamare quindi il metodo Commit per salvare le modifiche apportate alla transazione nella coda di destinazione. Per ulteriori informazioni, vedere Procedura: inviare messaggi nell'ambito di transazioni interne.
Le transazioni interne sono caratterizzate da una funzionalità piuttosto limitata in quanto non consentono di effettuare le transazioni con risorse che non riguardano l'accodamento messaggi, ad esempio i database. Se si desidera interagire con un database in una transazione, è necessario utilizzare le transazioni esterne. Nonostante tali limitazioni, le transazioni interne sono tuttavia caratterizzate da prestazioni migliori rispetto a quelle esterne.
Per entrambi i tipi di transazioni, interne o esterne, è necessario che i messaggi vengano inviati a una coda contrassegnata come transazionale. Per ulteriori informazioni, vedere Procedura: creare code transazionali.
Transazioni esterne
Le transazioni esterne vengono in genere utilizzate per l'invio di messaggi fra le code e un altro tipo di risorsa. È possibile, ad esempio, richiamare un messaggio da una coda e inviarlo a un database o viceversa. Le transazioni esterne differiscono da quelle interne in diversi aspetti:
Le transazioni esterne si basano su un coordinatore che non fa parte del sistema di Accodamento messaggi. In molti casi, si tratta di Microsoft Distributed Transaction Coordinator (DTC), che elenca le risorse necessarie nella transazione e regola il processo che determina se tutte le azioni nella transazione vengono eseguite con esito positivo o negativo come unità.
Il modello di programmazione di una transazione esterna è molto più complesso. Anziché chiamare semplicemente i metodi Begin, Commit e Abort, è necessario specificare attributi che indicano una transazione esterna e registrare il componente nei servizi COM+ 1.0. È inoltre necessario utilizzare una forma speciale dei metodi Send e Receive in grado di accettare un parametro per il tipo di transazione e impostare tale campo su Automatic.
Sono inoltre disponibili altri tipi di transazione inviabili senza utilizzare il componente MessageQueue. Per ulteriori informazion sulle transazioni in Visual Studio o .NET Framework, vedere i seguenti argomenti:
Per ulteriori informazioni su |
Vedere |
---|---|
Un esempio in cui viene illustrato l'uso degli attributi con le transazioni esterne |
MSDN Online. |
Transazioni in C++ |
Vedere anche
Attività
Procedura: creare code transazionali
Procedura: inviare messaggi nell'ambito di transazioni interne