Медленный MSMQ в службе WCF - PullRequest
       8

Медленный MSMQ в службе WCF

0 голосов
/ 16 сентября 2009

это странная вещь.

Я создал простой веб-сервис на основе SOAP с WCF. Когда вызывается метод SubmitTransaction, транзакция передается службе приложений. Но если служба приложения недоступна, она записывается в MSMQ.

Как это:

public void SubmitTransaction(someTransaction)
{
  try
  {
     // pass transaction data to application
  }
  catch(SomeError)
  {
     // write to MSMQ
  }  
}

Таким образом, при возникновении ошибки транзакция записывается в очередь. Теперь при использовании API MSMQ непосредственно в моей службе WCF все в порядке. Каждый вызов занимает несколько миллисекунд.

например:.

...
catch(SomeError)
{
  // write to MSMQ
  var messageQueue = new MessageQueue(queuePath);
  try
  {
    messageQueue.Send(accountingTransaction, MessageQueueTransactionType.Single);
  }
  finally
  {
    messageQueue.Close();
  }  
}

Но поскольку я хочу использовать функциональность очереди сообщений и в некоторых других точках системы, я создал новую сборку, которая заботится о записи очереди сообщений.

* +1014 * Как:
...
catch(SomeError)
{
  // write to MSMQ
  var messageQueueService = new MessageQueueService();
  messageQueueService.WriteToQueue(accountingTransaction);
}

Теперь при использовании этой настройки веб-служба неожиданно работает очень медленно. Из вышеуказанных миллисекунд каждый звонок теперь занимает до 4 секунд. Только потому, что материал очереди сообщений инкапсулирован в новую сборку. Логика точно такая же. Кто-нибудь знает, в чем может быть проблема ...?

Спасибо!

Ответы [ 2 ]

1 голос
/ 16 сентября 2009

Хорошо, теперь я знаю. Это как-то связано с моей настройкой регистрации (log4net). Я должен сначала проверить это. Извините за кражу вашего времени ..

0 голосов
/ 16 сентября 2009

У вас есть две новые строки кода здесь:

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

Вы знаете, какая из двух причин вызывает проблему? Возможно, добавьте некоторые записи, профилирование или пошаговое выполнение в отладчике, чтобы увидеть, какой из них кажется медленным.

...