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

时间:2010-11-11 09:19:11

标签: workflow-foundation-4 iis-7.5 workflowservice

问题

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

设置

  • 2在IIS 7.5中运行的Worflow Services(Workflow Foundation 4.0)。
  • 每个工作流服务都设置为IIS中的应用程序,并拥有自己的应用程序池,具有自己的身份凭据。
  • 应用程序池以“集成”管理管道模式运行。

描述

我们只是说,例如,我在 UserA 下运行的工作流服务A( WFSA )和B( WFSB ) UserB 分别。他们都希望通过工作流中的Receive活动来调用WCF。

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

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

例如, UserA AND UserB 的w3wp.exe工作进程正在处理 WFSA 的WCF消息。因此,如果我向 WFSA 发送10条WCF消息,则w3wp.exe将为 UserA 处理4条消息,而w3wp.exe将为 UserB <处理6条消息/ em>的

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

是否有一些我缺少的配置?

非常感谢任何帮助。

更新

在我正在开发的项目中, WFSA WFSB ,另一个WCF服务应用程序( WCFApp )在以下配置:

WFSA &lt; ==&gt; WFSB &lt; ==&gt; WCFApp

我们在以下情况中看到问题:

  • WFSA ==&gt; WFSB UserA ): WFSA WFSB 上实例化一个新工作流,该工作流在w3wp.exe上处理< EM>用户A
  • WFSB UserA )==&gt; WCFApp WFSB 调用 WCFApp ,进行一些处理。
  • WCFApp ==&gt; WFSB UserB !!!):处理完毕后, WCFApp 通知 WFSB 已完成。但WCF消息由 UserB 的w3wp.exe进程处理!当然,工作流实例在那里不存在,因此它会出错,并显示以下消息:
  

请求的资源已移至以下位置之一:   http://server/AppFolder/WFSB.xamlx/INotifyWhenDone

我可以通过设置来解决这个问题:

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我感觉这两种服务都在注册与IIS相同的“标识符”,虽然这是我无法告诉你的(可能是关联ID?)。因此,消息被路由到两个服务。我也感觉在集成管道中只有一个优化的服务管道和多个服务注册它(这是导致我之前的观点)。