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条消息.
听起来你正在进入限制限制,这些设置适用于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.