问题
不同应用程序池中我的2个工作流服务的WCF请求未由其各自的工作进程处理。相反,两个工作进程都在处理两个工作流服务的WCF请求。此问题仅发生在“集成”管理管道模式下,而不是“经典”管理管道模式下。
安装程序
-
2个在IIS 7.5中运行的工作流服务(Workflow Foundation 4.0)。
-
每个工作流服务都在IIS中设置为应用程序,并具有自己的应用程序池和自己的身份凭据。
-
应用程序池以“集成”管理管道模式运行。
说明
比如说,我有一个工作流服务(
WFSA公司
)和B(
WFSB公司
)在下面跑
用户
和
用户B
分别是。他们都期望通过工作流中的接收活动进行WCF调用。
当我启动2个应用程序池时,我可以看到2个w3wp.exe工作进程正在运行,其中一个为
用户
另一个是
用户B
. 我希望w3wp.exe工作进程
用户
应处理的WCF请求
WFSA公司
,和w3wp.exe工作进程
用户B
应处理的WCF请求
WFSB公司
.
但是,当我开始向工作流发送WCF消息时,我可以通过跟踪日志文件看到两个w3wp.exe进程正在处理对两个工作流服务的请求。
例如,WCF消息
WFSA公司
正在由w3wp.exe工作进程处理
用户
以及
用户B
. 所以如果我给
WFSA公司
,4将由w3wp.exe处理
用户
,6将由w3wp.exe处理
用户B
.
当我将应用程序池切换到“经典”托管管道模式时,WCF消息将按预期路由到相应的工作进程。
有没有我遗漏的配置?
任何帮助都非常感谢。
更新
在我正在做的项目中,
WFSA公司
,
WFSB公司
,和另一个WCF服务应用程序(
WCFApp公司
)在以下配置中相互通信:
WFSA公司
<==>
WFSB公司
<==>
WCFApp公司
我们在以下场景中看到问题:
-
WFSA公司
==>
WFSB公司
(
用户
):
WFSA公司
在上实例化新工作流
WFSB公司
,它在w3wp.exe上处理
用户
.
-
WFSB公司
(
用户
)==>
WCFApp公司
:
WFSB公司
打电话给
WCFApp公司
,进行一些处理。
-
WCFApp公司
==>
WFSB公司
(
用户B
!!!):处理后,
WCFApp公司
通知
WFSB公司
已经完成了。但是WCF消息由w3wp.exe进程处理
用户B
!!! 当然,工作流实例不存在,因此它会用以下消息出错:
请求的资源已移动到以下位置之一:
http://server/AppFolder/WFSB.xamlx/INotifyWhenDone
我可以通过设置:
<workflowIdle timeToUnload="00:00:00" />
这意味着当工作流空闲时,它将立即被持久化,并且可以处理发送到错误工作进程的消息,因为它可以在持久化数据库中找到工作流实例。然而,这个解决方案是不可接受的,因为持久性非常缓慢。