这是一件奇怪的事。

我使用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秒。只是因为消息队列的东西被封装在一个新的程序集中。逻辑是完全一样的。任何人都知道问题可能是什么......?

谢谢!

有帮助吗?

解决方案

好的,现在我知道了。它与我的日志设置(log4net)有关。我必须先检查一下。抱歉偷你的时间..

其他提示

这里有两行新代码:

var messageQueueService = new MessageQueueService();
messageQueueService.WriteToQueue(accountingTransaction);

你知道这两个中的哪一个导致了这个问题吗?也许在调试器中添加一些日志记录,分析或逐步执行以查看哪一个看起来很慢。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top