Domanda

Continuo a vedere documentazione dicendo che non è possibile inviare a una coda msmq transazionale remota, al di fuori dell'ambito di una transazione. Lo trovo difficile da credere perché penso lo sto facendo esattamente da settimane ormai. Ho una piccola app che pubblica messaggi in una coda remota che è transazionale. Solo per sperimentare le prestazioni, varie versioni del client hanno utilizzato TransactionScope per completare l'operazione di invio oppure no. Alla fine, l'utilizzo di una logica di transazione compensativa sembrava molto più intelligente e veloce, quindi l'uso di TransactionScope sia sul client che sul server è stato abbandonato. Il fatto è che i messaggi sembrano ancora comparire sulla coda e vengono elaborati dal servizio senza alcun problema.

Qualcuno può spiegarmi cosa mi manca qui? Sto solo diventando spessa? Sentiti libero di dirlo (sicuramente non sarà la prima volta).

È stato utile?

Soluzione

Le transazioni a cui si fa riferimento con TransactionScope sono implementate da dtc (coordinatore delle transazioni distribuite). msmq (come sql) ha il suo motore di transazione interno. Nel messaggio è presente una proprietà che indica che si tratta di un messaggio transazionale. E probabilmente lo hai impostato da qualche parte nel tuo codice.

Altri suggerimenti

Dipende dalla versione di MSMQ che stai utilizzando. Solo MSMQ 4.0 e versioni successive (Vista, 7, Server 2008) possono eseguire letture transazionali remote. E stai utilizzando correttamente TransactionScope, poiché è necessario utilizzare DTC.

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