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

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

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

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

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

Ответ 1

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

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

  • Перейдите в "Администрирование" → "Службы компонентов"
  • Разверните службы компонентов → Компьютеры →
  • Щелкните правой кнопкой мыши → Свойства → вкладка MSDTC
  • Нажмите кнопку "Конфигурация безопасности"

Ответ 2

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

  • Нажмите Начать, нажмите Выполнить, введите dcomcnfg и нажмите ОК, чтобы открыть Сервисы компонентов.

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

  • Щелкните правой кнопкой мыши Локальный код DTC и нажмите Свойства, чтобы отобразить диалоговое окно Локальные свойства DTC.

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

  • Установите флажок "Доступ к сети DTC Access.

  • Установите флажки "Разрешить входящие" и "Разрешить исходящие" .

  • Нажмите Применить, ОК.

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

  • Нажмите ОК и все.

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

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

Ответ 3

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

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

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

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

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

Ответ 4

@Dan,

Мне не нужен msdtc для транзакции для работы?

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

Ответ 5

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

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

Ответ 6

MSDTC должен быть включен в обеих системах, как на сервере, так и на клиенте.

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