在WF4.0中使用PersistenceIOParticipant时如何避免DTC?

时间:2011-12-08 07:09:01

标签: workflow-foundation-4 msdtc

我在WF4.0中使用PersistenceIOParticipant将内容保存到数据库中以及工作流实例的持久性。我不知道如何使用相同的连接对象与工作流持久性,我被迫使用分布式事务。有没有办法避免使用DTC?

2 个答案:

答案 0 :(得分:1)

我发现WF4示例项目“WorkflowApplication ReadLine Host”很有用 看一下persistenceIOParticipant的实例。

我在构造函数中切换了布尔值,以验证是否正在使用某个事务 MSDTC是必需的。

请参阅http://msdn.microsoft.com/en-us/library/dd764467.aspx

答案 1 :(得分:1)

如果使用SQL Server 2008+,则无论是否需要多个连接都无关紧要。在SqlWorkflowInstanceStore上使用反射器之后,我发现它在连接字符串上设置了一些额外的属性。以下是用于创建连接字符串的代码:

  SqlConnectionStringBuilder builder2 = new SqlConnectionStringBuilder(connectionString);
  builder2.AsynchronousProcessing = true;
  builder2.ConnectTimeout = (int)TimeSpan.FromSeconds(15.0).TotalSeconds;
  builder2.ApplicationName = "DefaultPool";
  SqlConnectionStringBuilder builder = builder2;
  return builder.ToString();

我使用分析器验证了在使用自定义IO参与者和此连接字符串代码时不涉及MSDTC。不要忘记将true传递给基础PersistenceIOParticipant构造函数并适当地传递Transaction.Current。显然,微软可以随时对其进行更改,因此请自行决定使用。