Вопрос

Это вообще правильный вопрос?У меня есть приложение .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.

  1. Нажмите Начинать, нажмите Бегать, тип dcomcnfg а затем нажмите ХОРОШО открыть Службы компонентов.

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

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

  4. Нажмите кнопку Безопасность вкладка.

  5. Галочка «Доступ к сети DTC» флажок.

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

  7. Нажмите Применять, ХОРОШО.

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

  9. Нажмите ХОРОШО и это все.

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

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

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

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

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

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

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

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

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

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

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

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

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

@Дэн,

Разве мне не нужна MSDTC для работы транзакций?

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top