Server.CreateObject Falha ao chamar o objeto .net do ASP em janelas de 64 bits no modo de 32 bits do IIS

1

Eu tenho um servidor executando o Windows 2003 de 64 bits, que executa o IIS no modo de 32 bits. Eu tenho um objeto COM que foi registrado usando o seguinte comando:

C:\WINDOWS\microsoft.net\Framework\v2.0.50727>regasm D:\Path\To\MyDll.dll /tlb:MyTLB.tlb /codebase

Quando eu crio o objeto via ASP, obtenho:

Server object error 'ASP 0177 : 8000ffff'

Server.CreateObject Failed

/includes/a_URLFilter.asp, line 19

8000ffff 

Quando eu crio o objeto em um script vbs e uso a versão de 32 bits do cscript (em \ Windows \ syswow64) ele funciona bem.

Eu verifiquei as permissões na DLL e a IUSR tem leitura / execução.

Mesmo se eu adicionar o IUSR ao grupo Administradores, recebo o mesmo erro.

Este é o log da filtragem do ProcessMonitor para o caminho da minha dll (anotado com minhas ações):

[Stop IIS]
1:56:30.0891918 PM  w3wp.exe    4088    CloseFile   D:\Path\To\MyDll.dll    SUCCESS 
[Start IIS]
[Refresh ASP page that uses DLL]
1:56:42.7825154 PM  w3wp.exe    2196    QueryOpen   D:\Path\To\MyDll.dll    SUCCESS CreationTime: 8/19/2009 1:11:17 PM, LastAccessTime: 8/19/2009 1:30:26 PM, LastWriteTime: 8/18/2009 12:09:33 PM, ChangeTime: 8/19/2009 1:22:02 PM, AllocationSize: 20,480, EndOfFile: 20,480, FileAttributes: A
1:56:42.7825972 PM  w3wp.exe    2196    QueryOpen   D:\Path\To\MyDll.dll    SUCCESS CreationTime: 8/19/2009 1:11:17 PM, LastAccessTime: 8/19/2009 1:30:26 PM, LastWriteTime: 8/18/2009 12:09:33 PM, ChangeTime: 8/19/2009 1:22:02 PM, AllocationSize: 20,480, EndOfFile: 20,480, FileAttributes: A
1:56:42.7826961 PM  w3wp.exe    2196    CreateFile  D:\Path\To\MyDll.dll    SUCCESS Desired Access: Generic Read, Disposition: Open, Options: Synchronous IO Non-Alert, Non-Directory File, Attributes: N, ShareMode: Read, Delete, AllocationSize: n/a, Impersonating: SERVER2\IUSR_SERVER2, OpenResult: Opened
1:56:42.7827194 PM  w3wp.exe    2196    CreateFileMapping   D:\Path\To\MyDll.dll    SUCCESS SyncType: SyncTypeCreateSection, PageProtection: 
1:56:42.7827546 PM  w3wp.exe    2196    CreateFileMapping   D:\Path\To\MyDll.dll    SUCCESS SyncType: SyncTypeOther
1:56:42.7829130 PM  w3wp.exe    2196    Load Image  D:\Path\To\MyDll.dll    SUCCESS Image Base: 0x6350000, Image Size: 0x8000
1:56:42.7830590 PM  w3wp.exe    2196    Load Image  D:\Path\To\MyDll.dll    SUCCESS Image Base: 0x6360000, Image Size: 0x8000
1:56:42.7838855 PM  w3wp.exe    2196    CreateFile  D:\Webspace\SecurityDll\bin SUCCESS Desired Access: Read Data/List Directory, Synchronize, Disposition: Open, Options: Directory, Synchronous IO Non-Alert, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, Impersonating: SERVER2\IUSR_SERVER2, OpenResult: Opened
1:56:42.7839081 PM  w3wp.exe    2196    QueryDirectory  D:\Path\To\MyDll.INI    NO SUCH FILE    Filter: SecurityDll.INI
1:56:42.7839281 PM  w3wp.exe    2196    CloseFile   D:\Webspace\SecurityDll\bin SUCCESS 

[Refresh ASP page that uses DLL]
[Refresh ASP page that uses DLL]
[Refresh ASP page that uses DLL]

Esta dll funciona bem em outros servidores, executando janelas de 32 bits. Não consigo pensar em mais nada que faça isso funcionar. Alguma sugestão?

UPDATE >

O .dll não está no GAC, é compilado como 32 bits e é assinado com firmeza.

    
por DrFredEdison 18.08.2009 / 22:02

5 respostas

0

Vocês precisam aprender a ler - isso não é asp.net.

  • Ok, primeiro: 32 bits é bom, mas o modo de 32 bits IIRC NÃO é para ASP, apenas para ASP.NET.
  • Como tal, ASP (ASP clássico, que é o que seu URL indica) AINDA será de 64 bits.
  • E como você não pode carregar um comejct de 32 bits em um espaço de processo de 64 bits - lá vai você. Erro explicado.

Basicamente eu sugiro voltar e instalar o sistema operacional de 32 bits aqui e, a médio prazo (ASAP), aposentar o ASP para o ASP.NET.

    
por 11.11.2010 / 07:26
2

link

    
por 26.07.2010 / 05:15
1

Algumas coisas para verificar:

  • Verifique se esse arquivo .dll também está no cache global de assemblies (não deveria ser). Olhar no painel de controle | Ferramentas Administrativas para a Configuração do .NET Framework 2.0 que permitirão que você inspecione o GAC
  • O assembly precisa ser um assembly com nome strong (assinado e tudo isso)

Dê uma olhada na página do MSDN de regasm .

Além disso, esse arquivo .dll não foi compilado para 64 bits, foi? (apenas para descartar o óbvio ...)

    
por 18.08.2009 / 22:20
1

Sim, se as DLLs .NET forem compiladas para 64 bits, esqueça :(. os módulos de 32 e 64 bits não podem se misturar (COM ou no COM) no mesmo processo.

    
por 15.03.2010 / 13:55
0

Eu estava tentando fazer exatamente a mesma coisa, mas com o Win 7 e o IIS 7.5. Eu finalmente consegui fazê-lo funcionar usando as versões de 32 bits e 64 bits do REGASM, mas não consegui rastrear exatamente qual delas fazia o sistema funcionar.

    
por 07.05.2010 / 15:40