HRESULT: 0x8004D00E с использованием TransactionScope - C # - PullRequest
3 голосов
/ 24 апреля 2009

Я получил следующую ошибку при попытке запустить приложение C # WinForms на компьютере под управлением Windows Server 2003 Standard Edition с пакетом обновления 1 (SP1), который подключался к SQL Server 2000, преобразовывал данные в приложении WinForms и вставлял преобразованные данные в сервер SQL Заявка 2005 года. Я подключаюсь к каждой базе данных, используя SSPI.

Код содержался в блоке TransactionScope:

System.TimeSpan TransactionTimeOut = new TimeSpan(0, 40, 0);

    using(TransactionScope Scope = new TransactionScope(TransactionScopeOption.RequiresNew, TransactionTimeOut))
    {
        try
        {
            //meat of transaction...
        }
        catch(Exception ex)
        {
            throw ex;
        }

        Scope.Complete();
    }

Сообщения об ошибках:

Исключение: транзакция уже был явно или неявно совершено или прервано.

Внутреннее исключение: транзакция имеет уже был явно или неявно совершено или прервано (исключение из HRESULT: 0x8004D00E)

Кто-нибудь знает, что может быть причиной этой проблемы?

Ответы [ 2 ]

4 голосов
/ 24 апреля 2009

Убедитесь, что DTC запущен на компьютере, на котором работает ваш код. Поскольку в области транзакций используется 2 соединения, транзакция будет преобразована в транзакцию на основе кода DTC.

Кроме того, убедитесь, что защита настроена правильно (проверьте это, разрешив анонимное участие в транзакции DTC), и что межсетевой экран разрешает DTC через нее.

Проверьте этот форум FAQ: Координатор распределенных транзакций (MSDTC) и FAQ по транзакциям

[В связи с этим вопросом SO: Координатор распределенных транзакций ]

0 голосов
/ 24 апреля 2009

Сколько времени занимает этот процесс? Если вы превысили время ожидания (маловероятно с 40-минутным таймаутом, но все еще возможно), вы можете получить это сообщение об ошибке.

В противном случае, вы получаете исключение? Что происходит до того, как сгенерировано исключение?

...