We use WCF and MSMQ (NetMsmqBinding) for communication between two sub-systems that need to be disconnected and asynchronous in nature. The problem is related to the delivery of messages "in order".
According to the documentation, "messages sent to a transactional queue are transferred exactly once in order". This is quoted from a Microsoft source "Queuing in WCF". However, in reality, our tests have shown that this is not the case. This is true even
for messages that are processed without any faults (and therefore not poison).
The WCF demo application Msmq3 and Msmq4 have been tested, with some different modifications to include and check for a consecutive message id. The attributes in ServiceContrant and OperationContract, and different NetMsmqBindings settings has been tested.
Our tests show that the WCF target is invoked in parallel. That is, message id 10 can be received before message id 9, for example.
Is this a known problem? Is our "in order" requirement not common scenario? How to solve it without exotic instance management settings that could effect the scalability and transaction robustness?
View Complete Post