2012-07-22 21 views
6

Sto cercando di sviluppare un servizio WCF che si occupi di centinaia di download e conversioni insieme. Sono stato inizializzato MSMQ con una coda di transazione che riceve messaggi da un'applicazione Web ASP.NET.WCF & MSMQ e processo TransactionScope lungo

La mia domanda dopo una lunga ricerca su Internet è come gestire il processo lungo nel metodo di servizio WCF che gestisce il messaggio MSMQ.

Il problema è che al download con dimensioni ridotte, il processo termina presto e il ritorno dell'oscilloscopio completo al servizio MSMQ, ma se la dimensione del download è grande e richiede 3/4 minuti per essere scaricata, il ritorno dell'oscilloscopio è ancora completare, ma il servizio MSMQ reinvia MSG al servizio WCF e ho duplicato i download.

Immagino che questo sia un problema di timeout, ma ho già provato a configurare meglio il mio host app.config senza successo.

 <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> 

e questo è il metodo in servizio 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 

UPDATE

Dopo lunghe prove e ricerche, sto iniziando a pensare che è impossibile fare lungo processo in il metodo che viene generato dal quesito MSMQ.

Ho risolto il problema utilizzando un thread diverso che gestisce i dati, ma ora il problema è che perdo il vantaggio TransactionScope perché una volta che il lavoro passa al nuovo thread, MSMQ elimina il messaggio come si è creduto.

+1

Avete provato a fare 'receiveRetryCount = 0 '? –

risposta