Workflow foundation 4 IIS7.5应用程序池/工作进程混合问题中的工作流服务(WF4)

Workflow foundation 4 IIS7.5应用程序池/工作进程混合问题中的工作流服务(WF4),workflow-foundation-4,iis-7.5,workflowservice,Workflow Foundation 4,Iis 7.5,Workflowservice,问题 不同应用程序池中my 2 Workflow Services的WCF请求未由其各自的工作进程处理。相反,两个工作进程都在处理两个工作流服务的WCF请求。此问题仅在“集成”托管管道模式下发生,而不是在“经典”托管管道模式下发生 设置 运行在IIS 7.5中的2个VoService服务(工作流基础4)。李> 每个工作流服务在IIS中设置为应用程序,并具有自己的应用程序池和自己的标识凭据 应用程序池以“集成”托管管道模式运行 说明 比如说,我让工作流服务A(WFSA)和B(WFSB)分别在U

问题

不同应用程序池中my 2 Workflow Services的WCF请求未由其各自的工作进程处理。相反,两个工作进程都在处理两个工作流服务的WCF请求。此问题仅在“集成”托管管道模式下发生,而不是在“经典”托管管道模式下发生

设置

  • 运行在IIS 7.5中的2个VoService服务(工作流基础4)。李>
  • 每个工作流服务在IIS中设置为应用程序,并具有自己的应用程序池和自己的标识凭据
  • 应用程序池以“集成”托管管道模式运行
说明

比如说,我让工作流服务A(WFSA)和B(WFSB)分别在UserA和UserB下运行。他们都期望通过工作流中的接收活动调用WCF

当我启动两个应用程序池时,我可以看到两个w3wp.exe工作进程正在运行,一个作为UserA,另一个作为UserB。我希望UserA的w3wp.exe工作进程应该处理WFSA的WCF请求,UserB的w3wp.exe工作进程应该处理WFSB的WCF请求

但是,当我开始向工作流发送WCF消息时,我可以通过跟踪日志文件看到两个w3wp.exe进程正在处理两个工作流服务的请求

例如,WFSA的WCF消息由UserA和UserB的w3wp.exe工作进程处理。因此,如果我向WFSA发送10条WCF消息,那么对于UserA,4条将由w3wp.exe处理,对于UserB,6条将由w3wp.exe处理

当我将应用程序池切换到“经典”托管管道模式时,WCF消息会按预期路由到相应的工作进程

我是否缺少一些配置

非常感谢您的帮助

更新

在我正在处理的项目中,WFSA、WFSB和另一个WCF服务应用程序(WCFApp)通过以下配置相互通信:

WFSA WFSB WCFApp

我们在以下场景中看到问题:

  • WFSA==>WFSB(UserA):WFSA在WFSB上实例化一个新工作流,该工作流在UserA的w3wp.exe上处理
  • WFSB(UserA)=>WCFApp:WFSB调用WCFApp,它执行一些处理
  • WCFApp==>WFSB(UserB!!!):处理后,WCFApp通知WFSB已完成。但是WCF消息由UserB的w3wp.exe进程处理!!!当然,那里不存在工作流实例,因此会出现以下错误消息:
请求的资源已移动到以下位置之一:

我可以通过设置以下各项来解决此问题:

<workflowIdle timeToUnload="00:00:00" />


这意味着工作流在空闲时将立即得到持久化,并且可以处理发送到错误工作进程的消息,因为它可以在持久化数据库中找到工作流实例。但是,这个解决方案是不可接受的,因为持久性非常慢。

我感觉这两个服务都在向IIS注册类似于相同的“标识符”,尽管我不能告诉您这是什么(可能是相关Id?)。因此,消息被路由到这两个服务。我还感觉到,在集成管道中,只有一个到服务的优化管道,并且有多个服务在其中注册(这就是我前面提到的问题)。

AppFabric有几个热修复程序,其中一个似乎与您遇到的问题有关。寻找链接。

有趣的想法。即使相关ID相同,WCF端点URI也不同。消息是否应该根据端点URI路由到正确的工作进程?如果你说的是真的,我觉得这是一个错误。这看起来很有希望。我将很快对此进行测试。在应用以下修补程序后,问题消失了。谢谢我在使用IIS Express进行开发时遇到了这个问题。有什么建议吗?中的AFAIK IIS Express与AppFabric不兼容。以下是有关我的问题的更多详细信息: