Domanda

questa è una cosa strana.

Ho creato un semplice servizio web basato su SOAP con WCF. Quando viene chiamato il metodo "SubmitTransaction", la transazione viene passata a un servizio dell'applicazione. Ma se il servizio dell'applicazione non è disponibile, viene scritto in un MSMQ.

In questo modo:

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

Quindi, quando si verifica un errore, la transazione viene scritta nella coda. Ora, quando utilizzo l'API MSMQ direttamente nel mio servizio WCF, tutto va bene. Ogni chiamata richiede alcuni millisecondi.

per esempio:.

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

Ma poiché desidero utilizzare la funzionalità della coda dei messaggi anche in altri punti del sistema, ho creato un nuovo assembly che si occupa della scrittura della coda dei messaggi.

Come:

...
catch(SomeError)
{
  // write to MSMQ
  var messageQueueService = new MessageQueueService();
  messageQueueService.WriteToQueue(accountingTransaction);
}

Ora, quando si utilizza questa configurazione, il servizio Web è improvvisamente molto lento. Dai millisecondi sopra menzionati, ogni chiamata ora richiede fino a 4 secondi. Solo perché la roba della coda dei messaggi è incapsulata in un nuovo assembly. La logica è esattamente la stessa. Qualcuno sa quale potrebbe essere il problema ...?

Grazie!

È stato utile?

Soluzione

Ok, ora lo so. Ha qualcosa a che fare con la mia configurazione della registrazione (log4net). Dovrò controllarlo prima. Ci scusiamo per averti rubato il tempo ..

Altri suggerimenti

Hai due nuove righe di codice qui:

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

Sai quale dei due sta causando il problema? Forse aggiungi un po 'di logging, o profiling, o passa in un debugger per vedere quale sembra lento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top