Как включить MSDTC на SQL Server?
-
08-06-2019 - |
Вопрос
Это вообще правильный вопрос?У меня есть приложение .NET для Windows, которое использует MSTDC и выдает исключение:
System.Transactions.TransactionManagerCommunicationException:Доступ к сети для диспетчера распределенных транзакций (MSDTC) отключен.Пожалуйста, включите DTC для доступа к сети в конфигурации безопасности для MSDTC, используя административный инструмент Component Services ---> System.Runtime.InterOpservices.COMEXCEPTION (0x8004D024):Диспетчер транзакций отключил свою поддержку для удаленных/сетевых транзакций.(Исключение из HRESULT:0x8004d024) at system.transactions.oletx.idtcproxyshiMfactory.receiveTrancection (uint32 PropgationTokensize, Byte [] PropgationToken, Intptr ManagedIdentifier, Guide & TransactionIdationShier, OLETXTransactionIsolationLevellevel, ItransactionShim & TransactionShimShim & TransactionShiM).
Я последовал за руководство Kbalertz по включению MSDTC на компьютере, на котором установлено приложение, но ошибка все равно возникает.
Мне было интересно, была ли это проблема с базой данных?Если да, то как я могу это решить?
Нет правильного решения
Другие советы
Используйте это для Windows Server 2008 r2 и Windows Server 2012 R2.
Нажмите Начинать, нажмите Бегать, тип dcomcnfg а затем нажмите ХОРОШО открыть Службы компонентов.
В дереве консоли щелкните, чтобы развернуть Службы компонентов, нажмите, чтобы развернуть Компьютеры, нажмите, чтобы развернуть Мой компьютер, нажмите, чтобы развернуть Координатор распределенных транзакций а затем нажмите Местный код неисправности.
Щелкните правой кнопкой мыши Местный код неисправности и нажмите Характеристики чтобы отобразить Локальные свойства DTC диалоговое окно.
Нажмите кнопку Безопасность вкладка.
Галочка «Доступ к сети DTC» флажок.
Наконец галочка «Разрешить входящие» и «Разрешить исходящие» флажки.
Нажмите Применять, ХОРОШО.
Появится сообщение о перезапуск обслуживание.
Нажмите ХОРОШО и это все.
Ссылка : https://msdn.microsoft.com/en-us/library/dd327979.aspx
Примечание: Иногда сетевой брандмауэр на локальном компьютере или сервере может прервать ваше соединение, поэтому обязательно создайте правила для «Разрешить входящие» и «Разрешить исходящие» соединение для C:\Windows\System32\msdtc.exe
Вам вообще нужен MSDTC?Эскалация, с которой вы сталкиваетесь, часто вызвана созданием нескольких подключений в пределах одной области TransactionScope.
Если вам это действительно нужно, вам необходимо включить его, как указано в сообщении об ошибке.На ХР:
- Перейдите в Администрирование -> Службы компонентов.
- Разверните Службы компонентов -> Компьютеры ->
- Щелкните правой кнопкой мыши -> Свойства -> вкладка MSDTC.
- Нажмите кнопку «Конфигурация безопасности».
Я обнаружил, что лучший способ отладки — использовать инструмент Microsoft под названием DTCPing
- Скопируйте файл как на сервер (БД), так и на клиент (сервер приложений/клиентский компьютер).
- Запустите его на сервере и клиенте
- На сервере:введите имя клиентского компьютера NetBIOS и попробуйте настроить соединение DTC
- Перезапустите оба приложения.
- У клиента:введите имя компьютера NetBIOS сервера и попробуйте настроить соединение DTC
У меня были проблемы с тарифами в нашей старой сети компании, и у меня есть несколько советов:
- Если вы получаете сообщение об ошибке «Ошибка Gethostbyname», это означает, что компьютер не может найти другой компьютер по его имя нетбиоса.Сервер может, например, разрешить и пропинговать клиента, но это работает на уровне DNS.Не на уровне поиска netbios.Использование WINS-серверов или изменение LMHOST (грязного) решит эту проблему.
- Если вы получаете сообщение об ошибке «Доступ запрещен», настройки безопасности не совпадают.Вам следует сравнить вкладку безопасности для msdtc и убедиться, что сервер и клиент совпадают.Еще одна вещь, на которую стоит обратить внимание, это Ограничить удаленные клиенты ценить.В зависимости от версии вашей ОС и, что более важно, пакета обновления это значение может отличаться.
- Другие проблемы с подключением:
- Брандмауэр между сервером и клиентом должен разрешать связь через порт 135.И что еще более важно, соединение может быть инициировано с обоих сайтов (у меня было много проблем с людьми, занимающимися брандмауэром в моей компании, потому что они предполагали, что только сервер откроет соединение с этим портом)
- Протокол возвращает случайный порт для подключения для реальной транзакции.Людям с брандмауэрами это не нравится, им нравится ограничивать порты определенным диапазоном.Вы можете ограничить генерацию динамического порта RPC определенным диапазоном, используя клавиши, как описано в разделе Как настроить динамическое выделение портов RPC для работы с межсетевыми экранами.
По моему опыту, если DTCPing может установить соединение DTC, инициируемое клиентом и инициированное сервером, ваши транзакции больше не являются проблемой.
Также можно увидеть здесь о том, как включить MSDTC из файла Services.msc панели управления.
На сервере, где находится триггер, вам необходимо включить службу MSDTC.Это можно сделать, нажав ПУСК > НАСТРОЙКИ > ПАНЕЛЬ УПРАВЛЕНИЯ > СРЕДСТВА АДМИНИСТРАТИРОВАНИЯ > СЛУЖБЫ.Найдите службу под названием «Координатор распределенной транзакции» и щелкните правой кнопкой мыши (на нем и выберите)> запуск.
MSDTC должен быть включен в обеих системах, как на сервере, так и на клиенте.
Кроме того, убедитесь, что между системами нет брандмауэра, блокирующего RPC.
ДТКТест это милое маленькое приложение, которое поможет вам устранить любые другие проблемы.
@Дэн,
Разве мне не нужна MSDTC для работы транзакций?
Только распределенные транзакции. Те, которые включают более одного соединения.Вдвойне убедитесь, что вы открываете только одно соединение в рамках транзакции и оно не будет обостряться — производительность также будет намного лучше.