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

时间:2012-02-13 20:59:37

标签: workflow-foundation-4 msmq workflowservice

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

这是我的配置:
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条消息。

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

1 个答案:

答案 0 :(得分:5)

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

<behaviors> 
  <serviceBehaviors> 
    <behavior name="WorkflowServiceBehavior"> 
      <!-- Specify throttling behavior -->
      <serviceThrottling maxConcurrentInstances="1000"/> 
    </behavior>
  </serviceBehaviors>
</behaviors>

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