我在执行工作流程时遇到了一个特殊问题 我已经尝试了我能想到的一切,现在需要一些想法。
这是我的配置:
1.在IIS 7中托管的WF4工作流服务(xamlx),并使用net.msmq / netMsmqBinding进行传输(MSMQ是事务性的)。
2.没有使用工作流程持久性
3.我使用控制台应用程序客户端向工作流发送消息(每条消息创建新的工作流)。
4.每个工作流程如下:等待START消息 - >等待END消息(我只发送START消息)。
如果我发送了500条消息 - 464正确处理,但超过该消息,所有消息都转到lock_ *队列,然后移至毒性队列。 我检查过Debug,Analytic事件日志,以及消息和跟踪svclog 这是我得到的最详细的信息:
System.TimeoutException,mscorlib, 版本= 4.0.0.0,文化=中立, PublicKeyToken = b77a5c561934e089操作 没有在00:00:30的分配超时内完成。时间 分配给这个操作可能是一个更长的一部分 超时。在 System.Runtime.AsyncResult.End [TAsyncResult](IAsyncResult结果)at at System.ServiceModel.Activities.Dispatcher.PersistenceProviderDirectory.LoadOrCreateAsyncResult.HandleReserveThrottle(IAsyncResult的 结果)在 System.Runtime.AsyncResult.AsyncCompletionWrapperCallback(IAsyncResult的 结果)System.TimeoutException: 操作未在指定的超时00:00:30内完成。 分配给此操作的时间可能是a的一部分 更长的超时。在 System.Runtime.AsyncResult.End [TAsyncResult](IAsyncResult结果)at at System.ServiceModel.Activities.Dispatcher.PersistenceProviderDirectory.LoadOrCreateAsyncResult.HandleReserveThrottle(IAsyncResult的 结果)在 System.Runtime.AsyncResult.AsyncCompletionWrapperCallback(IAsyncResult的 结果)
此时http://localhost/MyWebService?wsdl
的请求也因404而失败。
如果我重新启动IIS - 一切都恢复正常,直到发送了464条消息。
答案 0 :(得分:5)
听起来你正在进入限制限制,这些设置适用于WF4,就像它们对WCF一样。 maxConcurrentInstances设置设置在给定时间内可以在内存中的最大工作流实例数。
<behaviors>
<serviceBehaviors>
<behavior name="WorkflowServiceBehavior">
<!-- Specify throttling behavior -->
<serviceThrottling maxConcurrentInstances="1000"/>
</behavior>
</serviceBehaviors>
</behaviors>
另外,在IIS中托管时,应始终使用持久性。 IIS迟早会重新启动AppDomain,如果WorkflowServicehost无法将工作流实例的状态保存到磁盘,则它们将丢失。这也意味着可以从内存中删除空闲工作流实例,并且不计入内存限制中的maxConcurrentInstances。