Как включить 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, которое поможет вам устранить любые другие проблемы.