это странная вещь.
Я создал простой веб-сервис на основе 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 секунд. Только потому, что материал очереди сообщений инкапсулирован в новую сборку. Логика точно такая же. Кто-нибудь знает, в чем может быть проблема ...?
Спасибо!