我正在使用容器来解析WCF服务中的组件。但是,此WCF服务也可以启动WF工作流。 组件示例
-------------- ----------------
| Service A | ---> | DB Component |
-------------- ----------------
但是此服务还使用“ WorkflowService”来启动WF工作流,并且这些工作流还使用DB组件:
-------------- ------------- ----------------
| Service A | ---> | WF Service | ---> | DB Component |
-------------- -------------- ----------------
当前,我已经对组件使用了(自定义)混合生活方式:PerWCFOperation / PerThread。这意味着,如果没有WCF上下文,它将切换到PerThread生活方式。效果很好。
但是在极少数情况下,当通过相同的WCF调用同时启动多个工作流时,由于服务和DBComponent
在不同线程上共享相同的WFService
而失败,因为WCF如果存在上下文,则DBComponent
的解析WFService
与Service A
相同。这样会产生诸如“ DataReader已经打开”之类的错误。
PerThread的生活方式也是Workflow Foundation的问题,因为线程被并发执行的不同工作流复用。
现在我的问题: 为WFService解析后,如何配置容器以始终具有新的DBComponent?
我搜索的内容:
-我在Workflow Foundation中没有找到任何全局上下文,因此无法像WCF上下文一样工作来检测我们是否处于工作流上下文中
-container.BeginScope使用CallContext和the CallContext seems to be not maintained between the different activities of the same workflow
目前,我列表中的业务层没有对Castle Windsor(在WCF层中进行注入和配置)有很强的引用,我希望尽可能保持这种状态。
谢谢