2009-08-05 3 views
3

У меня есть приложение, которое извлекает данные и магазины в базу данных один раз в день. До недавнего времени это приложение находилось на том же компьютере, что и сервер SQL, но из-за некоторых проблем с некоторыми из необходимых периферийных устройств он был перемещен на отдельную машину с Windows XP.MSDTC сбой при первой транзакции

Проблема, которую мы имеем здесь, является то, что, когда первая сделка с утра бежать, мы получим трассировки стека из следующего:

System.Transactions.TransactionManagerCommunicationException: Связь с основным менеджером транзакций провалился. ---> System.Runtime.InteropServices.COMException (0x80004005): Ошибка HRESULT E_FAIL была возвращена из вызова COM-компонента.

Однако немедленная повторная транзакция успешно завершена. Кажется, что MSDTC слишком долго реагирует на первую транзакцию и, таким образом, терпит неудачу, но затем готов к второму. Я нашел несколько ссылок на это в Интернете, но не нашел реального решения. Кто-нибудь сталкивался с этим? Если да, существует ли способ предотвратить выгрузку MSDTC из памяти или есть ли другое решение для этого, например, продление тайм-аутов?

ответ

1

Спасибо, ребята,

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

0

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

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

0

Прежде всего, чтобы посмотреть (и это может не быть причиной вашей проблемы), убедитесь, что обратный поиск DNS на IP-адресе клиента фактически разрешает имя, относящееся к клиентской машине. У нас были проблемы с настройкой DNS/DHCP, где IP был сопоставлен с несколькими именами. Когда удаленный конец MSDTC попытался подключиться к MSDTC на клиенте, он пытался подключиться к другой машине.

Это проявится как (казалось бы, случайный) тайм-аут транзакции.

0

О, боже, мы тоже сталкиваемся с той же проблемой. Мы переносили данные из одной базы данных в другую (с другой структурой) и использовали Subsonic для ускорения процесса. Мы использовали транзакции и объект SharedDbConnectionScope, и он оказался неудачным на машине XP SP3. Я думаю, что в SP3 есть некоторые обновления, которые ломают все, так как он отлично работает на Vista, 2003 и 2008 Server..

EDIT: Здесь MSDN KB article, который обсуждает ту же проблему.

0

Возможно, вы можете попробовать запустить процесс, который просто инициирует и совершает транзакцию по DTC каждые 30 минут или около того?

0

У нас была аналогичная проблема в нашей тестовой среде. Первая транзакция, произошедшая после 10 минут бездействия, с ошибкой «Ошибка связи с основным менеджером транзакций».
После некоторых исследований мы пришли к выводу о том, что соединение MSDTC было отменено и не может быть установлено за требуемый промежуток времени (он швы, как тайм-аут по умолчанию для этой операции, составляет 4 секунды). Для решения этой проблемы мы увеличили время, в течение которого клиентский компьютер ожидает ответа пакета привязки с сервера. Это делается путем добавления ключа в реестр клиентского компьютера: http://support2.microsoft.com/?id=922430

Смежные вопросы