Я создаю диспетчер ресурсов, реализуя IEnlistmentNotification
. Я пытаюсь создать надежный RM, который вызвал у меня несколько вопросов.
Должен ли быть объект
IEnlistmentNotification
для каждой транзакции или один объектIEnlistmentNotification
должен обрабатывать все транзакции?Я думаю, что каждая транзакция хотела бы иметь свою собственную, чтобы она могла выполнять подготовку/фиксацию/откат для каждой транзакции.
Как обрабатывается файл восстановления?
Я предполагаю, что все, что происходит в транзакции, будет записано в файл восстановления во время подготовки.
Как можно разделить информацию для каждой транзакции? Я бы подумал, что каждая транзакция будет иметь отдельный файл или что один файл будет иметь какой-то идентификатор транзакции для каждой операции восстановления.
Когда происходит восстановление, остается ли
Transaction.Current.TransactionInformation.DistributedIdentifier/LocalIdentifier
таким же, как до сбоя? Итак, можно ли использовать один из этих идентификаторов для идентификации транзакции во время восстановления.Как происходит выздоровление?
Если у меня есть
TransactionScope
, внутри которого используется мой диспетчер ресурсов, и происходит сбой системы (выдергивается вилка или что-то еще) в середине области действия, как происходит восстановление при резервном запуске системы? Я предполагаю, что какой-то процесс, который запускал код, имеющий область действия, знает о сбоях системы или что-то в этом роде? В таком случае, какие системы/программы/службы настроены для фактического восстановления?