Использование TransactionScope для обновления таблиц, расположенных на географически разделенных серверах (не связанных) - PullRequest
0 голосов
/ 02 марта 2012

Мне нужно написать процесс, который должен обновить 2 идентичные таблицы, расположенные в 2 разных базах данных на серверах, которые географически разделены.

Мы не можем добавить один из серверов в качестве связанного сервера из-за некоторых соображений безопасности.

Требуется также, чтобы в случае сбоя любого из процессов обе транзакции были откатаны.Это все или ничего.После чтения документации в MSDN относительно TransactionScope создается впечатление, что этот класс позаботится о вас для вас, но в документации есть некоторые нечеткие области, которые, я надеюсь, кто-то, имеющий опыт использования этого подхода, сможет уточнитьдля меня:

  1. В документации сказано, что вы можете подключиться к 2 различным базам данных или даже к сторонним СУБД, но не указано, должны ли серверы баз данных быть "связаны"
  2. Предполагая, что их не нужно связывать, вы можете примерно объяснить, как TransactionScope обрабатывает исключения и выполняет откат при возникновении ошибки?

1 Ответ

2 голосов
/ 02 марта 2012

Серверы не должны быть связаны. Они даже могут быть совершенно разными (мы используем TransactionScope для распределенных транзакций между MS SQL и IBM Websphere MQ). На самом деле он использует службу MSDTC, которая действует как координатор транзакций для транзакций двухфазного принятия .

Хотя это звучит очень мощно и многообещающе, заставить его работать может быть сложно. Вам необходимо, чтобы служба MSTDC была запущена и работала на всех участвующих серверах, ее порты должны быть открыты в брандмауэре, а некоторые параметры безопасности должны быть правильно настроены.

Следующая ссылка может быть полезной

...