Agora ao artigo.
Quem já trabalhou com ASP ou VB (os antigos, não-.Net), provavelmente já usou um comando como esse:
set obj = CreateObject("Dundas.Upload")
Deixando erros de sintaxe de lado (Escrevi só como exemplo, vai), esse comando permite criar objetos COM para acessar em sua aplicação. Você sabia que é possível chamar uma classe .NET dessa forma?
A vantagem é que com isso é possível acessar uma dll em .Net de uma aplicação ASP tradicional, VB 6 ou qualquer outra plataforma que suporte COM. Isso pode facilitar a transição parcial de um sistema para a plataforma .Net.
Passarei aqui as instruções para o Visual Studio 2005, mas isso também é possível no 2003. Em primeiro lugar é necessário adicionar uma strong name key ao seu projeto. Caso não saiba como fazer isso, procure por Strong Name Key no google que deve achar bastante coisa sobre o assunto. Também é necessário que todas as DLLs às quais a sua faça referência tenham um strong name key. Agora é só compilar e registrar a DLL.
Para registrá-la, use o utilitário de linha de comando Regasm.exe , com a seguinte sintaxe :
RegAsm.exe NomeDoArquivo.dll /tlb /codebase
Não sei te dizer exatamente o que fazem os parâmetro /tlb e /codebase, mas sei que sem eles não funciona :P (Quem souber e quiser explicar, fique a vontade e poste um comentário. ;) ). Como qualquer outro utilitário do .Net, o RegAsm.exe está na pasta do framework (e pode ser acessado diretamente se utilizado o atalho para o prompt de comando criado pelo visual studio no menu iniciar).
Após registrada a DLL, é só acessá-la do ASP ou VB como se fosse um objeto COM. Na string de identificação da classe, use o namespace seguido do nome da classe. No exemplo abaixo , está sendo chamada a classe TesteCOM do namespace Br1.Library.Teste:
set obj = CreateObject("Br1.Library.Teste.TesteCOM").
Algumas observações importantes:
- Isso obviamente não elimina a necessidade do Framework, ele deve estar instalado na máquina onde o objeto COM for executado.
- A DLL chamará as outras como qualquer objeto .Net, então as dlls às quais ela faz referência devem estar ou no mesmo diretório ou no GAC.
- Só consegui fazer funcionar a DLL com tipos primitivos nos parâmetros e retorno. Internamente podem ser usadas classes e structs sem problema, mas a função que será chamada externamente só poder receber e retornar tipos primitivos, como string ou int.
- Como qualquer objeto COM, depois da primeira chamada, a DLL vai estar carregada na memória. Portanto, para substituir a DLL pode ser necessário reiniciar o ISS. Sugiro registrar a DLL de outro local, para não dar erro quando o VS não conseguir compilá-la devido à dll em bin\debug estar em uso. Sugiro criar um .BAT para a atualização, com os seguintes passos:
- Reiniciar o iis (use o iisreset.exe)
- Desregistrar a DLL com o comando : Regasm.exe NomeDoArquivo.dll /unregister
- Excluir os arquivos .DLL e .PDB do diretório de registro.
- Copiar os arquivos .DLL e .PDB do diretório bin\debug (ou bin\release, se preferir)
- Registrar a DLL novamente com o comando que já passei.
Essa abordagem pode ser bem interessante para ir convertendo aos poucos um sistema para .Net, ou então para incrementar um sistema já existente.
2 comentários:
E ai Márlon,
Olha só este link:
http://msdn2.microsoft.com/en-us/library/tzat5yw6(VS.80).aspx
Talvez ajude a entender melhor o Regasm e seus parâmetros.
Abs.
Procurando sobre strong name, achei seu post, que pode me ajudar com um outro sistema, em ASP 3.0.
Boa! Abraços!
Postar um comentário