我的團隊有一個windows服務,它使用http綁定託管一個wcf服務。當wcf服務收到消息時,它會立即使用NetMsmqBinding將其發送到另一個wcf服務,該服務也駐留在Windows服務中。 msmq服務處理消息並將其保存到我們的數據庫中。NetMsmqBinding:郵件正在被多次處理
在開發和臨時環境中,一切正常。當我們部署到生產時,我們看到發送到我們服務的消息正乘以n + 1(對於n條消息)。
例如:收到1條消息,2條保存到數據庫。收到的4個消息,20保存到DB等
我們懷疑它是與交易的MSMQ服務設置,
併發,並InstanceContextMode,但我們不能弄明白。
服務的設置爲:
- InstanceContextMode:默認。
- ConcurrenyMode:默認
- 事務:TransactionScoreRequired = True和TransactionAutoComplete = True。
- RetryCount重= 1,RetryCycles = 1
我們使用.NET 4中,MSMQ 3.0和Windows Server 2003
任何想法,以什麼可能導致此問題?
編輯:
了大量的研究後,我們發現了以下幾件事:
- 當WCF運行時嘗試提交事務的一個消息,它會拋出「交易異常異步中止「。每次消息重複時都會拋出此異常。
- 在wcf跟蹤中,我們沒有看到任何異常,除了上面所述的異常。
- 在System.Transaction跟蹤中,我們看到正在打開一個事務(針對第1條消息),然後在wcf運行時創建該事務的克隆(使用屬性RollbackIfNotCompleted = true)之後,幾秒鐘後通過跟蹤中沒有消息,然後同樣的事情再次發生。
我們真的無能......
感謝