Как я включаю MSDTC на SQL Server?

Элемент, который вы пытались найти, не был в DOM , когда ваш скрипт работал.

Позиция вашего DOM-зависимого скрипта может оказать глубокое влияние на его поведение. Браузеры анализируют HTML-документы сверху донизу. Элементы добавляются в DOM, и сценарии выполняются (как правило), когда они встречаются. Это означает, что порядок имеет значение. Как правило, скрипты не могут найти элементы, которые появляются позже в разметке, потому что эти элементы еще не добавлены в DOM.

Рассмотрим следующую разметку; сценарий # 1 не находит

, а сценарий # 2 преуспевает:


test div

Итак, что вы должны делать? У вас есть несколько вариантов:


Вариант 1: Переместите свой скрипт

Переместите свой скрипт дальше по странице, перед закрывающим тегом тела. Организованный таким образом остальная часть документа анализируется до того, как будет выполнен ваш скрипт:


  
  

Примечание: размещение скриптов внизу как правило, считается лучшей практикой .


Вариант 2: jQuery's ready()

Отмените свой сценарий до тех пор, пока DOM не будет полностью проанализирован, используя ready() :



Примечание. Вы можете просто привязать к DOMContentLoaded или window.onload, но у каждого есть свои оговорки. jQuery ready() предоставляет гибридное решение.


Вариант 3: Делегирование событий

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

blockquote>

Когда элемент вызывает событие (при условии, что это bubbling g6], и ничто не останавливает его распространение), каждый родитель в родословной этого элемента также получает событие. Это позволяет нам привязать обработчик к существующему элементу и примерным событиям, когда они пузырятся от его потомков ... даже те, которые добавлены после присоединения обработчика. Все, что нам нужно сделать, это проверить событие, чтобы узнать, был ли он поднят нужным элементом и, если да, запустите наш код.

jQuery on() выполняет эту логику для нас. Мы просто предоставляем имя события, селектор для желаемого потомка и обработчик событий:



Примечание: Обычно этот шаблон зарезервированы для элементов, которые не существовали во время загрузки или , чтобы избежать прикрепления большого количества обработчиков. Также стоит отметить, что, пока я прикреплял обработчик к document (для демонстрационных целей), вы должны выбрать ближайшего надежного предка.


Вариант 4: Атрибут defer

Используйте атрибут defer в

Для справки, вот код из этого внешнего скрипта :

document.getElementById("test").addEventListener("click", function(e){
   console.log("clicked: %o", this); 
});

Примечание: атрибут defer, безусловно, кажется , как волшебная пуля , но важно знать об оговорках ... 1. defer может использоваться только для внешних скриптов, т. е. для тех, у кого есть атрибут src. 2. знать о поддержке браузера , то есть: ошибка реализации в IE & lt; 10

102
задан slugster 5 August 2015 в 23:11
поделиться

4 ответа

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

при необходимости в нем тогда необходимо включить его, как обрисовано в общих чертах в сообщении об ошибке. На XP:

  • Переходят к Средствам администрирования-> Component Services
  • Expand Component Services->, Компьютеры->
  • Щелкают правой кнопкой-> Хит вкладки
  • Properties-> MSDTC кнопка
Security Configuration
101
ответ дан Andrew Peters 24 November 2019 в 04:28
поделиться

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

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

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

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

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

19
ответ дан Davy Landman 24 November 2019 в 04:28
поделиться

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

4
ответ дан Lars Mæhlum 24 November 2019 в 04:28
поделиться

@Dan,

разве мне не нужен msdtc, позволенный для транзакций работать?

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

4
ответ дан Andrew Peters 24 November 2019 в 04:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: