gpt4 book ai didi

WCF & MSMQ & TransactionScope 长流程

转载 作者:行者123 更新时间:2023-12-04 12:59:23 24 4
gpt4 key购买 nike

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

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

问题是在下载小尺寸时,过程很快完成并且范围返回到 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 就会删除 msg 认为已经完成。

最佳答案

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

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

关于WCF & MSMQ & TransactionScope 长流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11600847/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com