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

Я пытаюсь разработать службу 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 удаляет сообщение, поскольку считает, что это было сделано.

7
задан Giuseppe 3 August 2012 в 06:12
поделиться