2

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

这是我的配置:
1. 托管在 IIS 7 中的 WF4 工作流服务 (xamlx),并使用 net.msmq/netMsmqBinding 进行传输(MSMQ 是事务性的)。
2. 不使用工作流持久性。
3. 我使用控制台应用程序客户端向工作流发送消息(每条消息都会创建新的工作流)。4.每个工作流看起来像:等待开始消息->等待结束消息(我只发送开始消息)。

如果我发送 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 结果) 在 System.ServiceModel.Activities.Dispatcher.PersistenceProviderDirectory.LoadOrCreateAsyncResult.HandleReserveThrottle(IAsyncResult 结果) 在 System.Runtime.AsyncResult.AsyncCompletionWrapperCallback(IAsyncResult 结果)System.TimeoutException:操作未在分配的 00:00:30 超时内完成。分配给此操作的时间可能是较长超时的一部分。在 System.ServiceModel.Activities 的 System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult 结果)。

此时请求http://localhost/MyWebService?wsdl也失败并出现 404。

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

  1. 在哪里可以找到更详细的日志?(我已经将 System.Diagnostics 设置为最大详细程度)
  2. 464号有魔法吗?
  3. 什么可能导致此 Web 服务锁定?
4

1 回答 1

5

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

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

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

于 2012-02-14T07:01:49.613 回答