【发布时间】:2010-11-28 18:00:51
【问题描述】:
这是一件很奇怪的事情。
我使用 WCF 创建了一个简单的基于 SOAP 的 Web 服务。当调用“SubmitTransaction”方法时,事务被传递到应用程序服务。但如果应用程序服务不可用,则会将其写入 MSMQ。
像这样:
public void SubmitTransaction(someTransaction)
{
try
{
// pass transaction data to application
}
catch(SomeError)
{
// write to MSMQ
}
}
因此,当发生错误时,事务将写入队列。现在,当直接在我的 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);
}
现在使用此设置时,网络服务突然变得很慢。从上面提到的毫秒数来看,现在每个调用最多需要 4 秒。只是因为消息队列的东西被封装在一个新的程序集中。逻辑完全一样。任何人都知道问题可能是什么......?
谢谢!
【问题讨论】:
标签: wcf performance msmq