Поведение транзакций при использовании удаленного взаимодействия. NET отличается от локальных компонентов - PullRequest
0 голосов
/ 29 мая 2020

У меня есть приложение, которое использует удаленное взаимодействие. NET, которое выполняет некоторую работу с базой данных. Проблема в том, что транзакции ведут себя по-другому, когда компоненты развертываются удаленно, по сравнению с тем, когда они запускаются локально.

Сценарий выглядит следующим образом

using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required))
{
   bool performOffer = true;

   if (objectState == ObjectStatus.OfferAnswer)
   {
      // Not executed in current scenario
      [..]
   }

   if (performOffer)
   {
      // This is a remote component
      ObjectState objObjectState = new ObjectState();

      // Depublish the object to get a correct sequence of events.
      objObjectState.Depublish(_dbConnectionString, _userGuid, objectId);

      // Create the offer
      objOI.ObjectOffer(_dbConnectionString, _userGuid, objectId, 1, dateAnswer.ToShortDateString());

      objObjectState.Offer(_dbConnectionString, _userGuid, objectFunctionIdentity);

     // Send emails and letters accordingly                                
     autoPublishUtils.Offer(SMTPHost, useLanguage, defaultCulture, objectFunctionIdentity);
  }

  throw new Exception("Testing");

  ts.Complete();
}

Функция Depublish(...) содержит собственная транзакция, а при запуске с использованием локальных библиотек DLL эта транзакция откатывается правильно при возникновении исключения «Тестирование». При использовании удаленного взаимодействия. NET для удаленного вызова компонента внутренняя транзакция в Depublish(...) не откатывается.

Я убедился, что MSDT C работает правильно, и DTCPing может подключаться в обоих направлениях. Я пробовал обновиться до. NET 4.8, но безуспешно. Я нашел эту статью, но симптомы на самом деле не совпадают, локальный Transaction.Current никогда не становится нулевым.

Я думаю, что сейчас моя главная проблема в том, что я действительно не понимаю, как это должно работать, так что теперь, когда это не работает, я не знаю, как развиваться. Любая поддержка будет оценена!

...