工作流服务在464消息后停止响应
我在执行工作流时遇到一个特殊问题。
我尝试过所有我能想到的东西,现在需要创意。
这是我的配置:
1.在IIS 7中托管的WF4工作流服务(xamlx),使用net.msmq / netMsmqBinding进行传输(MSMQ是事务性的)。
2.没有使用工作流程持久性。
3.我使用控制台应用程序客户端将消息发送到工作流程(每条消息都会创建新的工作流程)。 4.每个工作流程如下所示:等待START消息 - >等待END消息(我只发送START消息)。
如果我发送了500条消息 - 464条得到了正确处理,但是在此之上,所有消息都会转到lock_ *队列,然后转到毒性队列。 我检查了调试,分析事件日志以及消息和跟踪svclogs以下是我得到的最详细的消息:
System.TimeoutException,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089该操作未在00:00:30的分配超时内完成。 分配给此操作的时间可能是超时时间的一部分。 System.Runtime.AsyncResult.End [TAsyncResult](IAsyncResult result)at System.ServiceModel.Activities.Dispatcher.PersistenceProviderDirectory.LoadOrCreateAsyncResult.HandleReserveThrottle(IAsyncResult result)at System.Runtime.AsyncResult.AsyncCompletionWrapperCallback(IAsyncResult result)System.TimeoutException:操作未在00:00:30的分配超时内完成。 分配给此操作的时间可能是超时时间的一部分。 System.Runtime.AsyncResult.End [TAsyncResult](IAsyncResult result)at System.ServiceModel.Activities.Dispatcher.PersistenceProviderDirectory.LoadOrCreateAsyncResult.HandleReserveThrottle(IAsyncResult result)at System.Runtime.AsyncResult.AsyncCompletionWrapperCallback(IAsyncResult result)
那时对http://localhost/MyWebService?wsdl
请求也会失败,并返回404。
如果我重新启动IIS - 一切都会恢复正常,直到发送464条消息。
听起来你正在进入节流限制,这些设置适用于WF4,就像它们对WCF所做的一样。 maxConcurrentInstances设置设置给定时间内可以在内存中的工作流实例的最大数量。
<behaviors>
<serviceBehaviors>
<behavior name="WorkflowServiceBehavior">
<!-- Specify throttling behavior -->
<serviceThrottling maxConcurrentInstances="1000"/>
</behavior>
</serviceBehaviors>
</behaviors>
就像在旁边一样,在IIS中托管时应始终使用持久性。 早晚IIS将重新启动AppDomain,如果WorkflowServicehost无法将工作流实例的状态保存到磁盘,则它们将丢失。 这也意味着闲置的工作流实例可以从内存中移除,并且不会对存在内存限制的maxConcurrentInstances进行计数。
链接地址: http://www.djcxy.com/p/95889.html