【问题标题】:WCF & MSMQ & TransactionScope long processWCF & MSMQ & TransactionScope 长流程
【发布时间】:2012-07-20 23:58:48
【问题描述】:

我正在尝试开发一个 WCF 服务,可以同时处理数百次下载和转换。 我已使用从 ASP.NET Web 应用程序接收消息的事务队列初始化 MSMQ。

我在互联网上长期研究后的问题是如何管理管理MSMQ消息的WCF服务方法中的长进程。

问题是,小尺寸下载,很快完成,范围返回到MSMQ服务,但如果下载量大,需要3/4分钟下载,则范围返回仍然完成,但是MSMQ服务将MSG重新发送到WCF服务,我重复下载了。

我猜这是超时的问题,但我已经尝试更好地配置我的主机 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 就会删除 msg,因为相信已经完成。

【问题讨论】:

  • 你试过制作receiveRetryCount = 0吗?

标签: wcf msmq msmq-wcf


【解决方案1】:

这里发生的是事务超时。 您可以在 machine.config 文件中指定一个新值,这就是您获得长事务的方式...

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 2011-02-15
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多