C #, Linq2Sql, TransactionScope, «Транзакция прервана.», Msdtc, sqlserver 2005 - PullRequest
0 голосов
/ 08 марта 2012

у нас возникли проблемы с TransactionScope в проекте .NET 4.

Мы разделили наши DAL на домены, то есть у нас есть разные LinCon2Sql DataContexts, указывающие на одну и ту же базу данных.

Проблема возникает, когда в одном и том же TransactionScope мы вставляем / обновляем более одного DataContext, мгновенно появляется транзакция msdtc как локально, так и на сервере, а затем она просто висит там на 1-2 минуты. (предположите, что время ожидания истекло), код будет продолжать выполняться до тех пор, пока t.Complete () и последующие подразумеваемые .Dispose не приведут к исключению «Транзакция прервана».

Мы настроили msdtc как локально, так и на сервере, чтобы разрешить все, без аутентификации, с полными уровнями трассировки, но по-прежнему никакой релевантной информации не приходит из dtctrace.log

Я полагаю, что стандартная процедура для msdtc срабатывает, когда инициируется более одного соединения с базой данных (даже если оно сопоставлено с одной и той же базой данных), но почему истекло время ожидания? Операции не противоречат друг другу, в нашем домене не может возникнуть взаимоблокировка?

Гуглил и всесторонне тестировал, надеюсь на какой-нибудь опытный опыт здесь:)

1 Ответ

1 голос
/ 08 марта 2012

В SQL2005 любая транзакция, охватывающая несколько соединений, будет преобразована в DTC. В SQL2008 несколько соединений с одной и той же строкой соединения могут участвовать в одной транзакции без необходимости использования кода DTC. С выбранной вами архитектурой я настоятельно рекомендую перейти на SQL2008, если это возможно. DTC может быть краской для правильной работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...