У меня есть две машины Server 2016, на которых запущено приложение Classic ASP в интегрированном пуле x64 иОбщая конфигурация.
Я думал, что оба сервера настроены одинаково, однакоодин сервервыдает ошибку:
Установить obj = Server.CreateObject("MSXml2.ServerXmlHttp.6.0")
Номер ошибки = 800401F3
ТОЛЬКО в моем приложении!
Если я помещаю эту строку на отдельную страницу ASP, работающую на том же сайте, она завершается нормально (Err.Number=0)
Я не нашел никаких записей в журнале событий.
Что я пробовал:
- С версией и без (часть .6.0)
- Разрешения реестра
- Права доступа к файлам msxml3.dll и msxml6.dll (как System32, так и SysWOW64)
- Отменить/повторно зарегистрировать те же самые DLL
Надеюсь на предложения о том, куда смотреть/как решить эту проблему.
решение1
Если он работает нормально на другой странице того же сайта, но не на другой странице того же приложения, это должно быть связано с настройками приложения. Начните с пустого web.config и добавьте определенные настройки из вашего сломанного приложения.
Если на базовой странице того же приложения все работает нормально, проблема именно в вашей странице.
Не уверен, что именно внутри конфигурации может привести к поломке, но я бы попробовал сделать именно это.
решение2
Проблема была связана не с созданием объекта, а с ошибкой (или изменением поведения) в Server.CreateObject() и некотором коде, который обрабатывал несколько версий разных COM DLL.
Существовал код, который обрабатывал несколько возможных версий DLL следующим образом:
obj = Server.CreateObject("Version1.Object")
If Err.Number <> 0 Then
obj = Server.CreateObject("Version2.Object")
End If
В конце, если один из этих вариантов был успешным, Err.Number = 0
В IIS 10.0 (Server 2016) успешное выполнение Server.CreateObject("Version2.Object") оставило предыдущее значение в Err.Number из Server.CreateObject("Version2.Object").
Новый код:
obj = Server.CreateObject("Version1.Object")
If Err.Number <> 0 Then
Err.Clear
obj = Server.CreateObject("Version2.Object")
End If