WCF и MSMQ & TransactionScope длительный процесс

Я пытаюсь разработать сервис WCF, который позаботится о сотнях загрузок и конвертации вместе. Я был инициализирован MSMQ с очередью транзакций, которые получают сообщения из веб-приложения ASP.NET.

Мой вопрос после долгих исследований в Интернете заключается в том, как управлять длинным процессом в методе службы WCF, который управляет сообщением MSMQ.

Проблема заключается в том, что при загрузке с небольшим размером процесс завершается в ближайшее время, и возврат области завершается в службу MSMQ, но если размер загрузки большой и требуется 3/4 минуты для загрузки, то возврат области все еще завершен, но Служба 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 удаляет сообщение, поскольку считает, что это было сделано.

1 ответ

Здесь происходит то, что время транзакции истекло. Вы можете указать новое значение в файле machine.config, и именно так вы получаете длинные транзакции...

http://blogs.inkeysolutions.com/2012/01/managing-timeouts-while-using.html

Другие вопросы по тегам