Próbuję stworzyć usługę WCF, która zajmuje się setkami pobrań i konwersji. Zainicjowałem MSMQ z kolejką transakcji, która odbiera wiadomości z aplikacji internetowej ASP.NET.WCF & MSMQ & TransactionScope long process
Moje pytanie po długich badaniach w internecie jest jak zarządzać długi proces w metodzie usług WCF, które zarządzają wiadomości MSMQ.
Problem polega na tym, że po pobraniu z małym rozmiarem proces kończy się wkrótce, a zakres powraca do usługi MSMQ, ale jeśli rozmiar pobierania jest duży i potrzeba 3/4 minuty do pobrania, to nadal zwracany jest zakres kompletne, ale usługa MSMQ ponownie wysyła MSG do usługi WCF i mam zduplikowane pobrania.
myślę, że jest to problem limitu czasu, ale ja już próbował lepiej config mój gospodarz app.config bez powodzenia.
<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>
i jest to metoda do usług 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
Po długich prób i badań, zaczynam myśleć, że jest niemożliwe, aby na długi proces metoda uruchamiana przez kwerendę MSMQ.
Obejmuję go przy użyciu innego wątku, który zarządza danymi, ale teraz problem polega na tym, że tracę perspektywę TransactionScope, ponieważ po przejściu zadania do nowego wątku, MSMQ usuwa komunikat, jak się uważa.
Czy próbowałeś co 'receiveRetryCount = 0'? –