Как избежать DTC при использовании PersistenceIOParticipant в WF4.0? - PullRequest
0 голосов
/ 08 декабря 2011

Я использую PersistenceIOParticipant в WF4.0 для сохранения чего-либо в базу данных вместе с сохранением экземпляра рабочего процесса.Я понятия не имею, как использовать один и тот же объект соединения с постоянством рабочего процесса, и я вынужден использовать распределенную транзакцию.Есть ли способы избежать использования DTC?

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

Если используется 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();

Я проверил с помощью профилировщика, что MSDTC не участвует при использовании пользовательского участника ввода-вывода и этого кода строки подключения.Не забудьте передать true в базовый конструктор PersistenceIOParticipant и соответствующим образом передать Transaction.Current.Очевидно, что Microsoft может изменить это в любое время, поэтому используйте по своему усмотрению.

1 голос
/ 31 января 2012

Мне показался полезным пример проекта WF4 "WorkflowApplication ReadLine Host" чтобы увидеть пример настойчивости в участии в действии.

Я переключил логические значения в конструкторе, чтобы убедиться, что транзакция используется и что Требуется MSDTC.

См. http://msdn.microsoft.com/en-us/library/dd764467.aspx

...