.NET Workflow 4创建启用WCF的工作流使用的自定义持久性存储

时间:2012-08-17 21:59:15

标签: .net wcf persistence workflow-foundation-4 workflowservice

我想使用WF 4作为我项目的工作流引擎。我正在使用WF的活动是长时间运行的(可能会持续几周或几个月),所以我希望它使用持久性存储。我还想利用持久的延迟,以便我可以在事后几天发送通知。我的所有研究都指出了我在使用AppFabric的IIS中托管的工作流服务的方向。

我在本地计算机上测试了这个场景,效果很好。我的工作流程仍然存在,而我的延迟开球时,我希望他们。我有一个问题:我公司定义的体系结构不允许服务层(IIS中托管的WCF服务)直接与数据库层通信。我认为解决这个问题的一个好方法是编写一个自定义实例存储,它将通过数据访问层将调用路由到持久性DB。我可以找到大量通过代码实现自定义实例存储的示例(即workflowApplication.InstanceStore = customInstanceStore)。但是,启用WCF的服务没有代码,我找不到任何允许我通过web.config配置持久性存储的示例。我尝试创建一个PersistenceProvider / PersistenceProviderFactory并通过web.config进行设置,但这是不允许的。

启用WCF的工作流主机是否必须使用直接与数据库对话的内置SQL实例存储?

1 个答案:

答案 0 :(得分:1)

  

我的所有研究都指出了我在使用AppFabric的IIS中托管的工作流服务的方向。

这是正确的道路。 IIS提供WCF端点,AppFabric安装管理持久性,延迟和监视。

  

启用WCF的工作流主机是否必须使用直接与数据库对话的内置SQL实例存储?

完全没有,实际上您应该做的就是将您的持久性存储类型替换为您在Web.config中常见的持久性存储类型。因此,在下面的代码段中,您会看到SqlWorkflowInstanceStore中的behavior - 将您的类型放在其位置。您的类型可能会收到一些自定义属性,例如connectionString,因此您需要对其进行配置。

<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name=”myBehavior”>
          <SqlWorkflowInstanceStore connectionString=”Data Source=myDatatbaseServer;Initial Catalog=myPersistenceDatabase”>
        </behavior>
      </serviceBehaviors>
    <behaviors>
  </system.serviceModel>
</configuration>