IIS 10.0, ASP clássico não pode criar o objeto MSXml2.ServerXmlHttp.6.0

IIS 10.0, ASP clássico não pode criar o objeto MSXml2.ServerXmlHttp.6.0

Eu tenho duas máquinas Server 2016 executando um aplicativo ASP clássico em um pool integrado x64 eConfiguração compartilhada.

Eu pensei que ambos os servidores estavam configurados de forma idêntica, no entantoum servidorrecebe um erro em:

Definir obj = Server.CreateObject("MSXml2.ServerXmlHttp.6.0")

Número de erro = 800401F3

SOMENTE na minha aplicação!

Se eu colocar essa linha em uma página ASP separada, rodando no mesmo site, ela completa normalmente (Err.Number=0)

Não encontrei nenhuma entrada no log de eventos.

O que eu tentei:

  • Com e sem versão (parte .6.0)
  • Permissões de registro
  • Permissões de arquivo em msxml3.dll e msxml6.dll (System32 e SysWOW64)
  • Cancelar/registrar novamente as mesmas DLLs

Espero sugestões sobre onde procurar/como solucionar isso.

Responder1

Se funcionar bem em outra página do mesmo site, mas não em outra página do mesmo aplicativo, isso deve estar relacionado às configurações do aplicativo. Comece com um web.config vazio e adicione configurações específicas do seu aplicativo quebrado.

Se funcionar bem em uma página básica do mesmo aplicativo, sua página é o problema.

Não tenho certeza do que dentro da configuração causaria a falha, mas é isso que eu tentaria.

Responder2

Isso não foi um problema com a criação de objetos, mas com um bug (ou mudança de comportamento) em Server.CreateObject() e algum código que manipulava várias versões de uma DLL COM diferente.

Havia um código que tratava de várias versões possíveis de uma DLL da seguinte maneira:

    obj = Server.CreateObject("Version1.Object")

    If Err.Number <> 0 Then
        obj = Server.CreateObject("Version2.Object")
    End If

No final, assumindo que um deles foi bem-sucedido, Err.Number = 0

No IIS 10.0 (Servidor 2016), um Server.CreateObject("Version2.Object") bem-sucedido deixou o valor anterior em Err.Number de Server.CreateObject("Version2.Object").

Novo Código:

obj = Server.CreateObject("Version1.Object")

If Err.Number <> 0 Then
    Err.Clear
    obj = Server.CreateObject("Version2.Object")
End If

informação relacionada