工作流服务在464条消息后停止响应

THX*_*138 2 msmq workflowservice workflow-foundation-4

我在执行工作流程时遇到了一个特殊问题.
我已经尝试了我能想到的一切,现在需要一些想法.

这是我的配置:
1.在IIS 7中托管的WF4工作流服务(xamlx),并使用net.msmq/netMsmqBinding进行传输(MSMQ是事务性的).
2.没有使用工作流持久性.
3.我使用控制台应用程序客户端向工作流发送消息(每条消息创建新的工作流).4.每个工作流程如下:等待START消息 - >等待END消息(我只发送START消息).

如果我发送500条消息 - 464正确处理,但超过该消息,所有消息都转到lock_*队列,然后移动到毒性队列.我检查过Debug,Analytic事件日志,以及消息和跟踪svclogs这是我得到的最详细的消息:

System.TimeoutException,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089操作未在分配的超时00:00:30内完成.分配给此操作的时间可能是较长超时的一部分.at System.Runtime.AsyncResult.End [TAsyncResult](IAsyncResult结果)System.ServiceModel.Activities.Dispatcher.PersistenceProviderDirectory.LoadOrCreateAsyncResult.HandleReserveThrottle(IAsyncResult result)at System.Runtime.AsyncResult.AsyncCompletionWrapperCallback(IAsyncResult result)System.TimeoutException:The操作未在指定的超时00:00:30内完成.分配给此操作的时间可能是较长超时的一部分.at System.Runtime.AsyncResult.End [TAsyncResult](IAsyncResult结果)位于System.Runtime.AsyncResult.AsyncCompletionWrapperCallback(IAsyncResult结果)的System.ServiceModel.Activities.Dispatcher.PersistenceProviderDirectory.LoadOrCreateAsyncResult.HandleReserveThrottle(IAsyncResult result)

那时请求http://localhost/MyWebService?wsdl也失败了404.

如果我重新启动IIS - 一切都恢复正常,直到发送464条消息.

  1. 我在哪里可以找到更详细的日志?(我已将System.Diagnostics设置为max verbosity)
  2. 是464号魔法吗?
  3. 导致此Web服务锁定的原因是什么?

Mau*_*ice 5

听起来你正在进入限制限制,这些设置适用于WF4,就像它们对WCF一样.maxConcurrentInstances设置设置给定时间内可以在内存中的最大工作流实例数.

<behaviors> 
  <serviceBehaviors> 
    <behavior name="WorkflowServiceBehavior"> 
      <!-- Specify throttling behavior -->
      <serviceThrottling maxConcurrentInstances="1000"/> 
    </behavior>
  </serviceBehaviors>
</behaviors>
Run Code Online (Sandbox Code Playgroud)

另外,在IIS中托管时应始终使用持久性.IIS迟早会重新启动AppDomain,如果WorkflowServicehost无法将工作流实例的状态保存到磁盘,则它们将丢失.这也意味着可以从内存中删除空闲工作流实例,并且不计入内存限制中的maxConcurrentInstances.