这是一件奇怪的事。
我使用WCF创建了一个简单的基于SOAP的Web服务。调用'SubmitTransaction'方法时,事务将传递给应用程序服务。但是,如果应用程序服务不可用,则会将其写入MSMQ。
像这样:
public void SubmitTransaction(someTransaction)
{
try
{
// pass transaction data to application
}
catch(SomeError)
{
// write to MSMQ
}
}
因此,当发生错误时,事务将写入队列。现在,在我的WCF服务中直接使用MSMQ API时,一切都很好。每次通话都需要几毫秒。
E.g:
...
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秒。只是因为消息队列的东西被封装在一个新的程序集中。逻辑是完全一样的。任何人都知道问题可能是什么......?
谢谢!
答案 0 :(得分:1)
好的,现在我知道了。它与我的日志设置(log4net)有关。我必须先检查一下。抱歉偷你的时间..
答案 1 :(得分:0)
这里有两行新代码:
var messageQueueService = new MessageQueueService();
messageQueueService.WriteToQueue(accountingTransaction);
你知道这两个中的哪一个导致了这个问题吗?也许在调试器中添加一些日志记录,分析或逐步执行以查看哪一个看起来很慢。