I have Windows Services that are reading from MSMQ queues, performing some work, and then sending to either another queue or another service. Everything is transactional, so if there is a failure the message will remain / revert to its original queue for reprocessing.
Some messages have now 'disappeared'.
I don't see how this can happen, but my only hunch is that if the Windows Service is stopped mid-transaction then the transaction may not successfully roll back. In my experience, unless the Transaction.Abort() is explicitly called then the messages are not rolled back.
Does anyone have any insight into this, or suggestions as to how I can improve my system to ensure that incomplete MSMQ transactions are always rolled back?