2012-07-22 23 views
6

Estoy tratando de desarrollar un servicio WCF que se encargue de cientos de descargas y conversiones en conjunto. He inicializado MSMQ con una cola de transacciones que recibe mensajes de una aplicación web ASP.NET.WCF & MSMQ & TransactionScope long process

Mi pregunta después de una larga investigación en Internet es cómo gestionar el largo proceso en el método de servicio WCF que gestiona el mensaje MSMQ. El problema es que al descargarlo con tamaño pequeño, el proceso finaliza pronto y el alcance vuelve completo al servicio MSMQ, pero si el tamaño de descarga es grande y necesita 3/4 minutos para descargarse, el alcance regresará. completo, pero el servicio MSMQ reenvía el MSG al servicio WCF y he duplicado las descargas.

Supongo que este es un problema de tiempo de espera, pero ya he intentado configurar mejor mi Host app.config sin éxito.

 <netMsmqBinding> 
    <binding name="OrderServiceMsmqBinding" 
      maxRetryCycles="1" 
      receiveRetryCount="1" 
      retryCycleDelay="00:05:20" 
      deadLetterQueue="System" 
      receiveErrorHandling="Move" 
      exactlyOnce="true" 
      durable="true" 
      receiveTimeout="00:10:00" 
      sendTimeout="00:20:00" 
      timeToLive="1.00:00:00" useMsmqTracing="true"> 
     <security mode="None"></security> 
    </binding> 
    </netMsmqBinding> 

y este es el método en servicio WCF:

<OperationBehavior(TransactionScopeRequired:=True, TransactionAutoComplete:=True)> _ 
Public Sub FfmpegConversion(ffmpegjob As FfmpegJob) Implements IOrderService.FfmpegConversion 
    Using sc As New TransactionScope(TransactionScopeOption.Required) 
     Try 
      ExecuteLongProcess() 
     Catch ex As Exception 
      Console.WriteLine(ex.Message) 
     Finally 
      sc.Complete() 
     End Try 
    End Using 
End Sub 

ACTUALIZACIÓN

Después de largos ensayos e investigaciones, estoy empezando a pensar que es imposible hacer proceso largo en el método que dispara la cola MSMQ.

Lo soluciono utilizando un hilo diferente que gestiona los datos, pero ahora el problema es que pierdo la ventaja de TransactionScope porque una vez que el trabajo pasa al nuevo hilo, el MSMQ elimina el mensaje como cree que se ha hecho.

+1

¿Ha intentado hacer 'receiveRetryCount = 0'? –

Respuesta