Pregunta

esto es algo extraño.

Creé un servicio web simple basado en SOAP con WCF. Cuando se llama al método 'SubmitTransaction', la transacción se pasa a un servicio de aplicación. Pero si el servicio de la aplicación no está disponible, se está escribiendo en un MSMQ.

Me gusta esto:

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

Entonces, cuando ocurre un error, la transacción se escribe en la cola. Ahora, cuando uso la API MSMQ directamente en mi servicio WCF, todo está bien. Cada llamada toma unos pocos milisegundos.

Por ejemplo:

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

Pero como también quiero usar la funcionalidad de la cola de mensajes en otros puntos del sistema, creé un nuevo ensamblado que se encarga de la escritura de la cola de mensajes.

Me gusta:

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

Ahora, cuando se usa esta configuración, el servicio web de repente es muy lento. De los milisegundos mencionados anteriormente, cada llamada ahora toma hasta 4 segundos. Solo porque el material de la cola de mensajes está encapsulado en un nuevo ensamblado. La lógica es exactamente la misma. Alguien sabe cuál podría ser el problema ...?

¡Gracias!

¿Fue útil?

Solución

Ok, ahora lo sé. Tiene algo que ver con mi configuración de registro (log4net). Tendré que comprobar eso primero. Perdón por robarte el tiempo ...

Otros consejos

Aquí tiene dos nuevas líneas de código:

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

¿Sabes cuál de los dos está causando el problema? Quizás agregue algunos registros o perfiles, o avance en un depurador para ver cuál parece lento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top