Это даже правильный вопрос? У меня есть приложение .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 Управляемый идентификатор, Идентификатор Guid & транзакции, идентификатор & Транзакция и транзакция).
Я следовал руководству Kbalertz, чтобы включить MSDTC на ПК, на котором установлено приложение, но ошибка все равно возникает.
Мне было интересно, если это проблема с базой данных? Если так, как я могу решить это?
MSDTC должен быть включен в обеих системах, как на сервере, так и на клиенте.
Также убедитесь, что между системами, которые блокируют RPC, нет брандмауэра.
DTCTest - это отличное приложение, которое поможет вам устранить любые другие проблемы.
Вам вообще нужен MSDTC? Эскалация, которую вы испытываете, часто вызывается созданием нескольких соединений в одной TransactionScope.
Если вам это нужно, вам нужно включить его, как указано в сообщении об ошибке. На XP:
- Перейдите в Администрирование -> Службы компонентов
- Развернуть Услуги по компонентам -> Компьютеры ->
- Щелкните правой кнопкой мыши -> Свойства -> вкладка MSDTC
- Нажмите кнопку Конфигурация безопасности
@Dan,
Не нужно ли включить msdtc для работы транзакций?
Только распределенные транзакции - те, которые связаны с более чем одним соединением. Вдвойне убедитесь, что вы открываете только одно соединение в рамках транзакции, и оно не будет увеличиваться - производительность также будет намного лучше.
Я обнаружил, что лучший способ отладки - использовать инструмент Microsoft под названием DTCPing
- Скопируйте файл на сервер (БД) и клиент (сервер приложений / клиентский ПК)
- Запустите его на сервере и клиенте
- На сервере: введите имя компьютера netbios клиента и попытайтесь установить соединение DTC
- Перезапустите оба приложения.
- На клиенте: введите имя компьютера netbios сервера и попытайтесь установить соединение DTC
У меня была проблема с тарифами в нашей старой корпоративной сети, и у меня есть несколько советов:
- если вы получаете сообщение об ошибке «Gethostbyname failed», это означает, что компьютер не может найти другой компьютер по его имени netbios . Например, сервер может разрешить и пропинговать клиента, но это работает на уровне DNS. Не на уровне поиска netbios. Использование серверов WINS или изменение LMHOST (грязный) решит эту проблему.
- Если появляется сообщение «Отказано в доступе», настройки безопасности не совпадают. Вы должны сравнить вкладку безопасности для msdtc и получить соответствие сервера и клиента. Еще одна вещь, на которую стоит обратить внимание - это значение RestrictRemoteClients . В зависимости от версии вашей ОС и, что более важно, пакета обновления, это значение может отличаться.
- Другие проблемы с подключением:
- Брандмауэр между сервером и клиентом должен разрешать связь через порт 135. И что более важно, соединение может быть инициировано с обоих сайтов (у меня было много проблем с людьми из брандмауэра в моей компании, потому что они предполагали, что только сервер будет открывать соединение на этот порт)
- Протокол возвращает случайный порт для подключения к реальной транзакции связи. Людям с брандмауэром это не нравится, им нравится ограничивать порты определенным диапазоном. Вы можете ограничить генерацию динамического порта RPC определенным диапазоном, используя ключи, как описано в разделе Как настроить динамическое выделение порта RPC для работы с межсетевыми экранами .
По моему опыту, если DTCPing может установить соединение DTC, инициированное клиентом и инициированное сервером, ваши транзакции больше не являются проблемой.
Можно также увидеть здесь о том , как включить MSDTC от services.msc контрольной панели.
На сервере, на котором находится триггер, необходимо включить службу MSDTC. Вы можете сделать это, нажав СТАРТ> НАСТРОЙКИ> ПАНЕЛЬ УПРАВЛЕНИЯ> АДМИНИСТРАТИВНЫЕ ИНСТРУМЕНТЫ> УСЛУГИ. Найдите сервис под названием «Координатор распределенных транзакций» и ПРАВЫЙ ЩЕЛЧОК (на нем и выберите)> Старт.
Используйте это для Windows Server 2008 r2 и Windows Server 2012 R2
Нажмите кнопку Пуск , выберите пункт Выполнить , введите dcomcnfg, а затем нажмите кнопку ОК, чтобы открыть службы компонентов .
В дереве консоли щелкните, чтобы развернуть Службы компонентов , щелкните, чтобы развернуть Компьютеры , щелкните, чтобы развернуть Мой компьютер , щелкните, чтобы развернуть Координатор распределенных транзакций, а затем щелкните Локальный код неисправности .
Щелкните правой кнопкой мыши Local DTC и выберите Properties, чтобы открыть диалоговое окно Local DTC Properties .
Перейдите на вкладку « Безопасность ».
Флажок «Сетевой доступ к DTC» .
Наконец отметьте флажки «Разрешить входящий» и «Разрешить исходящий» .
Нажмите Применить , ОК .
Появится сообщение о перезапуске сервиса.
Нажмите ОК и все.
Ссылка: https://msdn.microsoft.com/en-us/library/dd327979.aspx
Примечание. Иногда сетевой брандмауэр на локальном компьютере или сервере может прерывать ваше соединение, поэтому убедитесь, что вы создали правила для «Разрешить входящие» и «Разрешить исходящие» дляC:\Windows\System32\msdtc.exe
msdtc.exe
c:\windows\system32\msdtc.exe
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Security
. Больше информации о свойствах здесь .