Довольно часто разработчики сталкиваются с ситуацией: при старте сеанса отладки по клавише F5 информационная база открывается больше минуты, но если отключить сетевой кабель или отключить сетевой адаптер, то запуск происходит практически мгновенно. При этом обычный запуск через список баз без отладки также работает штатно. Выясним причину такого поведения и подробно разберем по шагам, как локализовать и устранить эту проблему.
Для понимания происходящих процессов проанализируем записи технологического журнала 1С. В момент зависания в событиях CALL и SCALL (вызовы сервиса IRemoteCreatorService и метода createRemoteInstance) четко видны повторяющиеся временные задержки ровно по 15 секунд:
17:05.438001-1,CALL,1,process=1cv8,t:clientID=3,Interface=7f58f27d-5ad8-43a1-aa1e-c982f41bed5c,IName=IRemoteCreatorService,Method=0,CallID=18806,MName=createRemoteInstance
...
17:20.446000-0,EXCP,1,process=1CV8C,Usr=Иванов,Descr=InitializeSecurityContext: Error 80090311!
За несколько таких обращений суммарная задержка как раз превышает минуту. Ключевая зацепка здесь — системное событие исключения EXCP с описанием InitializeSecurityContext: Error 80090311!.
Разберем природу этой ошибки. Код 0x80090311 (системная константа SEC_E_NO_AUTHENTICATING_AUTHORITY) интерфейса безопасности Windows (SSPI) означает: «Не найден центр проверки подлинности» (No authority could be contacted for authentication).
Когда мы нажимаем F5, Конфигуратор и запускаемый толстый или тонкий клиент должны связаться между собой по протоколу отладки. Процессы 1С обращаются к системным механизмам Windows (SSPI / NTLM / Kerberos) для согласования аутентификации. Если рабочая станция находится в домене Active Directory (или учетная запись пользователя создана в домене), подсистема безопасности операционной системы пытается найти контроллер домена в сети. Если контроллер домена недоступен (например, разработчик работает из дома, без VPN или через сторонний маршрутизатор), каждый сетевой запрос ждет ответа ровно 15 секунд до наступления таймаута.
Когда же сетевой адаптер полностью выключен, сетевой стек Windows мгновенно сообщает об отсутствии подключений и операционная система сразу берет локально кэшированные учетные данные без попыток сетевых запросов. Рассмотрим, как устранить эти задержки без необходимости отключать интернет.
Часто операционная система пытается разрешить локальное имя компьютера (например, в журнале фигурирует сетевое имя s002) через внешние DNS-серверы провайдера или локальной сети, тратя время на таймауты. Устраним эти задержки прямым сопоставлением локального имени в системе:
C:\Windows\System32\drivers\etc\hosts.localhost:
127.0.0.1 s002
::1 s002
s002 укажем фактическое имя текущего компьютера.Проанализируем конфигурацию сетевого адаптера и доменной авторизации:
Широковещательные запросы и зависания протоколов разрешения имен могут провоцироваться сетевыми надстройками Windows. Разберем шаги по их отключению:
ncpa.cpl).Начиная с платформы 8.3, разработчикам доступно два механизма взаимодействия Конфигуратора и предметов отладки: классический TCP/IP и современный HTTP. Механизм HTTP-отладки не полагается на доменную авторизацию Windows SSPI, а поднимает локальный легкий веб-сервис отладки.
Если быстро скорректировать сетевые политики операционной системы невозможно, а работать требуется прямо сейчас, применим рабочий обходной сценарий:
В этом сценарии первичная инициализация сеанса происходит в стандартном режиме, а отладчик подключается к работающему процессу без прохождения полного цикла ожидания доменной аутентификации.