温莎城堡集装箱中的WCF和WF混合生活方式

时间:2019-04-30 11:16:26

标签: wcf castle-windsor workflow-foundation

我正在使用容器来解析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的解析WFServiceService 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层中进行注入和配置)有很强的引用,我希望尽可能保持这种状态。

谢谢

0 个答案:

没有答案