Consuma uma montagem .NET de uma página clássica do ASP
-
28-09-2019 - |
Pergunta
Eu tenho um site antigo do .NET 2005 que possui algumas páginas do ASP e com problemas de referência de objetos para acessar o .NET DLL. A tarefa de manutenção foi proferida para mim e o desenvolvedor original não está em lugar algum :( Eu já comecei no .NET, para que eu realmente não dominei o lidar com esse tipo de problema.
Na seta abaixo, é onde estou incentivando a referência do objeto "(0x80131500) não definida como uma instância de um objeto".
Set objCommon = Server.CreateObject("Wrapper.CommonFunctions")
Dim machineBuilding
--->>> If objCommon.IsMachineAccount(strLogin, machineBuilding) Then
Eu já segui estas etapas:
- regasm /tbl /codebase mycomdll.dll
- gacutil /i mycomdll.dll
- Copie o diretório MyComdll.dll para o System32
- Do console, execute o ISSRESET
- Se a sua DLL for criada no Framework 2.0, crie um arquivo "dllhost.exe.config" no diretório System32 e coloque o seguinte:
<?xml version="1.0"?>
<configuration>
<startup>
<supportedRuntime version="v2.0.50727"/>
<requiredRuntime version="v2.0.50727"/>
</startup>
</configuration>
6.- reiniciar o IIS com o comando ISSRET
E também estes:
- Sob as propriedades do projeto a. Sob Application Informações de Assembléia i. Verifique “Torne o conjunto do Assembly”. b. Sob construção i. Verifique “Registre -se para com interop"
- Não assine.
- Certifique -se de que o IUSR tenha permissões completas para o arquivo.
- Reinicie o IIS via iisreset para lavar qualquer caches.
E ainda não foi bem -sucedido executando o aplicativo. Mais alguma idéia do que verificar ou fazer? Obrigado!
Emir
Solução 3
O problema era que o aplicativo está procurando um arquivo que contém o nome do host do banco de dados.
Outras dicas
O valor do HRESULT é muito relevante. Observe o 'código da instalação' em 0x80131500, 13 indica que a fonte de erro é gerenciada código. Você já tem a tradução amigável para 1500.
Em outras palavras, o código gerenciado lançou uma exceção e não foi tratado. Isso não é incomum, é claro, o código gerenciado geralmente lança exceções. Especialmente NullReferenceException, o que você desencadeou. A depuração disso não é tão fácil, pois você está executando o código gerenciado em um processo não gerenciado. Não tenho certeza de qual é o procedimento adequado para o IIS, normalmente é feito com as ferramentas + conectar ao processo. A melhor maneira de enfrentar isso é isolar o código, escrever alguns testes de unidade.
Fora isso, a variável de construção mecânica me parece um bom candidato ao NRE. Você não inicializou.
BTW: Não tem nada a ver com o registro. Isso produz um tipo de erro muito diferente.
Eu tinha uma solução semelhante à sua, mas já se foi há muito tempo. No entanto, ainda tenho algumas informações sobre isso e notei que minha declaração do Regam é diferente.
regasm mycomdll.dll /tlb :mycomdll.tlb
Suas referências tbl em vez de tlb - talvez esse seja o problema?
Eu também acho que você deve verificar novamente os valores dos parâmetros e, em seguida, chamar o método com esses valores de parâmetros por meio de um cliente .NET rápido e sujo para verificar se o método lança um erro.
Eu também quero confirmar que meu código ASP clássico correspondia ao seu ...
set obj = server.CreateObject("mycomdll.myclass")
...
call obj.method(false)
...
myvar = obj.method2(param1, param2, param3)