2012-07-22 9 views
6

Ich versuche, einen WCF-Dienst zu entwickeln, der Hunderte von Downloads und Konvertierungen gemeinsam erledigt. Ich wurde MSMQ mit einer Transaktionswarteschlange initialisiert, die Nachrichten von einer ASP.NET-Webanwendung empfängt.WCF & MSMQ & TransactionScope langer Prozess

Meine Frage nach einer langen Nachforschung über Internet ist, wie man den langen Prozess in der WCF-Dienstmethode verwaltet, die die MSMQ-Nachricht verwaltet.

Das Problem ist, dass bei Download mit kleiner Größe der Prozess bald abgeschlossen und der Umfang zurück zu den MSMQ-Dienst abgeschlossen, aber wenn die Download-Größe groß ist und 3/4 Minuten heruntergeladen werden müssen, als der Bereich immer noch abgeschlossen, aber der MSMQ-Dienst hat die MSG erneut an den WCF-Dienst gesendet, und ich habe Downloads dupliziert.

Ich denke, das ist ein Problem der Zeitüberschreitung, aber ich habe bereits versucht, meinen Host app.config ohne Erfolg zu konfigurieren.

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

und dies ist das Verfahren in WCF-Dienst:

<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

Nach langen Studien und Forschung, ich fange an zu glauben, dass unmöglich ist langwierigen Prozess zu machen in die Methode, die von der MSMQ-Warteschlange ausgelöst wird.

Ich umgehen es mit einem anderen Thread, der die Daten verwalten, aber jetzt ist das Problem, dass ich den TransactionScope Vantage verlieren, da sobald der Auftrag an den neuen Thread übergeben, dann die MSMQ löschen die msg als glauben, dass getan wurde.

+1

Haben Sie versucht, machen 'receiveRetryCount = 0 '? –

Antwort