Как включить MSDTC на SQL Server? - PullRequest
       60

Как включить MSDTC на SQL Server?

101 голосов
/ 11 августа 2008

Это даже правильный вопрос? У меня есть приложение .NET для Windows, которое использует MSTDC и выдает исключение:

System.Transactions.TransactionManagerCommunicationException: доступ к сети для диспетчера распределенных транзакций (MSDTC) отключен. Пожалуйста, включите DTC для сетевой доступ в конфигурации безопасности для MSDTC с использованием инструмента администрирования служб компонентов ---> System.Runtime.InteropServices.COMException (0x8004D024): диспетчер транзакций отключил поддержку удаленного / сетевого сделки. (Исключение из HRESULT: 0x8004D024) в System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransaction (UInt32 propgationTokenSize, Byte [] propgationToken, IntPtr managedIdentifier, Идентификатор Guid & транзакции, OletxTransactionIsolationLevel & изоляцияУровень

Я следовал руководству Kbalertz, чтобы включить MSDTC на ПК, на котором установлено приложение, но ошибка по-прежнему возникает.

Мне было интересно, если это проблема с базой данных? Если так, как я могу решить это?

Ответы [ 6 ]

111 голосов
/ 03 декабря 2014

Используйте это для Windows Server 2008 r2 и Windows Server 2012 R2

  1. Нажмите Пуск , нажмите Выполнить , введите dcomcnfg и затем нажмите OK , чтобы открыть Службы компонентов .

  2. В дереве консоли щелкните, чтобы развернуть Службы компонентов , щелкните, чтобы развернуть Компьютеры , щелкните, чтобы развернуть Мой компьютер , нажмите, чтобы развернуть Координатор распределенных транзакций и затем нажмите Локальный код неисправности .

  3. Щелкните правой кнопкой мыши Local DTC и выберите Properties , чтобы отобразить диалоговое окно Local DTC Properties .

  4. Перейдите на вкладку Безопасность .

  5. Флажок «Сетевой доступ к DTC» Флажок.

  6. Наконец, установите флажок «Разрешить входящий» и «Разрешить исходящий» .

  7. Нажмите Применить , OK .

  8. Появится сообщение о перезапуске службы.

  9. Нажмите OK и все.

Ссылка: https://msdn.microsoft.com/en-us/library/dd327979.aspx

Примечание: Иногда сетевой брандмауэр на локальном компьютере или сервере может прерывать ваше соединение, поэтому убедитесь, что вы создали правила для «Разрешить входящие» и «Разрешить исходящие» " соединение для C:\Windows\System32\msdtc.exe

101 голосов
/ 11 августа 2008

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

Если вам это нужно, вам нужно включить его, как указано в сообщении об ошибке. На XP:

  • Перейдите в Администрирование -> Службы компонентов
  • Развернуть Услуги компонентов -> Компьютеры ->
  • Щелкните правой кнопкой мыши -> Свойства -> вкладка MSDTC
  • Нажмите кнопку настройки безопасности
17 голосов
/ 26 января 2009

Я обнаружил, что лучший способ отладки - использовать инструмент Microsoft под названием DTCPing

  1. Скопируйте файл как на сервер (БД), так и на клиент (сервер приложений / клиентский ПК).
    • Запустите его на сервере и клиенте
    • На сервере: введите имя компьютера клиента netbios и попытайтесь установить соединение DTC
    • Перезапустите оба приложения.
    • На клиенте: введите имя компьютера netbios сервера и попытайтесь установить соединение DTC

У меня была проблема с тарифами в нашей старой корпоративной сети, и у меня есть несколько советов:

  • если вы получаете сообщение об ошибке «Gethostbyname failed», это означает, что компьютер не может найти другой компьютер по его имени нетбиос . Сервер может, например, разрешить и пропинговать клиента, но это работает на уровне DNS. Не на уровне поиска netbios. Использование серверов WINS или изменение LMHOST (грязный) решит эту проблему.
  • если вы получили сообщение об ошибке «Отказано в доступе», настройки безопасности не совпадают. Вы должны сравнить вкладку безопасности для msdtc и настроить сервер и клиент для сопоставления. Еще одна вещь, на которую стоит обратить внимание, это значение RestrictRemoteClients . В зависимости от версии вашей ОС и, что более важно, пакета обновления, это значение может быть различным.
  • Другие проблемы с подключением:
    • Брандмауэр между сервером и клиентом должен разрешать связь через порт 135. И что более важно, соединение может быть инициировано с обоих сайтов (у меня было много проблем с людьми из брандмауэра в моей компании, поскольку они предполагали, что только сервер будет открыть соединение с этим портом)
    • Протокол возвращает случайный порт для подключения к реальной транзакции связи. Людям с брандмауэром это не нравится, им нравится ограничивать порты определенным диапазоном. Вы можете ограничить генерацию динамического порта RPC определенным диапазоном, используя ключи, как описано в Как настроить выделение динамического порта RPC для работы с брандмауэрами .

По моему опыту, если DTCPing может установить соединение DTC, инициированное клиентом и инициированное сервером, ваши транзакции больше не являются проблемой.

6 голосов
/ 03 июня 2014

Также можно посмотреть здесь о том, как включить MSDTC из панели управления services.msc.

На сервере, где находится триггер, необходимо включить MSDTC сервис на. Вы можете сделать это, нажав СТАРТ> НАСТРОЙКИ> ПАНЕЛЬ УПРАВЛЕНИЯ> АДМИНИСТРАТИВНЫЕ ИНСТРУМЕНТЫ> УСЛУГИ. Найдите сервис под названием «Координатор распределенных транзакций» и ПРАВЫЙ ЩЕЛЧОК (на нем и выберите)> Пуск.

4 голосов
/ 12 августа 2008

@ Dan

Нужно ли включать MSDTC для транзакции на работу?

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

4 голосов
/ 11 августа 2008

MSDTC должен быть включен в обеих системах, как на сервере, так и на клиенте.
Также убедитесь, что между системами, блокирующими RPC, нет брандмауэра.
DTCTest - отличное приложение, которое поможет вам устранить любые другие проблемы.

...