我正在尝试开发一个WCF服务,它可以同时处理数百次下载和转换.我已经使用从ASP.NET Web应用程序接收消息的事务队列初始化了MSMQ.
经过长期的Internet研究后,我的问题是如何管理管理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>
Run Code Online (Sandbox Code Playgroud)
这是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
Run Code Online (Sandbox Code Playgroud)
UPDATE
经过长时间的试验和研究,我开始认为不可能对MSMQ队列触发的方法进行长时间的处理.
我使用管理数据的不同线程来解决它,但现在的问题是我失去了TransactionScope的优势,因为一旦作业传递给新线程,那么MSMQ就会认为已经完成了删除msg.
小智 0
这里发生的情况是事务超时。您可以在 machine.config 文件上指定一个新值,这就是获得长事务的方式...
http://blogs.inkeysolutions.com/2012/01/managing-timeouts-while-using.html
| 归档时间: |
|
| 查看次数: |
1081 次 |
| 最近记录: |