Frage

Dies ist eine seltsame Sache.

Ich habe einen einfachen SOAP-basierte Web-Service mit WCF. Wenn die ‚SubmitTransaction‘ -Methode genannt wird, wird die Transaktion auf einen Anwendungsdienst weitergegeben zu werden. Aber wenn der Anwendungsdienst nicht verfügbar ist, wird er in eine MSMQ geschrieben werden.

Wie folgt aus:

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

Also, wenn ein Fehler occures wird die Transaktion in die Warteschlange geschrieben. Nun, wenn die MSMQ API direkt in meinem WCF-Dienst verwenden, alles ist in Ordnung. Jeder Anruf dauert ein paar Millisekunden.

Z. B:.

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

Da ich aber die Message Queue-Funktionalität an einigen anderen Stellen des Systems als auch nutzen will, Ich habe eine neue Anordnung, die Pflege der Nachrichtenwarteschlange Schreibens nimmt.

Wie:

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

Nun, wenn dieses Setup verwendet, ist der Web-Service plötzlich sehr langsam. Aus den oben genannten Millisekunden nimmt jeder Anruf jetzt bis 4 Sekunden. Nur weil die Nachrichtenwarteschlange Material wird in einer neuen Baugruppe verkapselt. Die Logik ist genau das gleiche. Jeder weiß, was könnte das Problem sein ...?

Danke!

War es hilfreich?

Lösung

Ok, jetzt weiß ich es. Es hat etwas mit meinem Logging Setup (log4net) zu tun. Ich werde das erste überprüfen. Es tut uns Ihre Zeit stehlen ..

Andere Tipps

Sie haben zwei neue Zeilen Code hier:

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

Sie wissen, welche der beiden das Problem verursacht? Vielleicht einige Protokollierung hinzufügen oder Profilierung, oder in einem Debugger Schritt durch, um zu sehen, die man langsam erscheint.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top