Я пытаюсь разработать службу WCF, которая позаботится о сотнях загрузок и конвертации вместе. Я инициализировал MSMQ с очередью транзакций, которая получает сообщения от веб-приложения ASP.NET.
Мой вопрос после долгих исследований в Интернете заключается в том, как управлять длительным процессом в методе службы WCF, который управляет сообщением MSMQ.
Проблема заключается в том, что при загрузке с небольшим размером процесс завершается быстро, и область возвращается в службу MSMQ. Служба MSMQ повторно отправляет MSG в службу WCF, и у меня есть дублированные загрузки.
Я предполагаю, что это проблема тайм-аута, но я уже безуспешно пытался настроить мой Host app.config лучше.
<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>
и это метод в службе 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
ОБНОВЛЕНИЕ
После долгих испытаний и исследований я начинаю думать, что невозможно превратить длительный процесс в метод, запускаемый очередью MSMQ.
Я обхожу это, используя другой поток, который управляет данными, но теперь проблема в том, что я теряю преимущество TransactionScope, потому что как только задание передается новому потоку, MSMQ удаляет сообщение, поскольку считает, что это было сделано.