我在WF4.0中使用PersistenceIOParticipant将内容保存到数据库中以及工作流实例的持久性。我不知道如何使用相同的连接对象与工作流持久性,我被迫使用分布式事务。有没有办法避免使用DTC?
答案 0 :(得分:1)
我发现WF4示例项目“WorkflowApplication ReadLine Host”很有用 看一下persistenceIOParticipant的实例。
我在构造函数中切换了布尔值,以验证是否正在使用某个事务 MSDTC是必需的。
答案 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。显然,微软可以随时对其进行更改,因此请自行决定使用。