這是一件很奇怪的事情。WCF服務內緩慢的MSMQ
我使用WCF創建了一個簡單的基於SOAP的Web服務。當調用'SubmitTransaction'方法時,事務被傳遞給應用程序服務。但是,如果應用程序服務不可用,它將被寫入MSMQ。
像這樣:
public void SubmitTransaction(someTransaction)
{
try
{
// pass transaction data to application
}
catch(SomeError)
{
// write to MSMQ
}
}
所以,當一個錯誤occures交易被寫入隊列。現在,直接在我的WCF服務中使用MSMQ API時,一切都很好。每次通話都需要幾毫秒。
例如爲:
...
catch(SomeError)
{
// write to MSMQ
var messageQueue = new MessageQueue(queuePath);
try
{
messageQueue.Send(accountingTransaction, MessageQueueTransactionType.Single);
}
finally
{
messageQueue.Close();
}
}
但因爲我想用在該系統的一些其他點的消息隊列功能好,我創建了一個新組件採用消息隊列寫的照顧。
像:
...
catch(SomeError)
{
// write to MSMQ
var messageQueueService = new MessageQueueService();
messageQueueService.WriteToQueue(accountingTransaction);
}
現在使用此設置時,Web服務是突然很慢。從上述毫秒中,每個呼叫現在最多需要4秒。僅僅是因爲消息隊列的東西被封裝在一個新的程序集中。邏輯完全一樣。任何人都知道問題可能是......?
謝謝!
我會盡力去衡量時間。但是這兩行只是我上面顯示的消息隊列的替代品。 var messageQueueService = new MessageQueueService()只做一個新的實例。 messageQueueService.WriteToQueue(accountingTransaction)與第一個示例中的完全相同。如果我將該方法的內容直接複製粘貼到服務中,則一切都會很快。唯一的區別是,它在另一個程序集中... – Chris