Depurando módulos IIS ISAPI

Antes de iniciar eu gostaria de frisar que isto não é uma revisão de um produto. Eu encontrei uma maneira excelente de depurar ISAPI DLLs e acontece de exigir uma ferramenta muito barata. Eu só queria compartilhar esta informação, já que tem sido tão útil para mim!

Recentemente eu estive escrevendo alguns serviços web utilizando Delphi 7 e IIS 5 e tem sido uma verdadeira dor para depurá-los.

Eu costumava ter uma referência a um artigo muito bom explicando como configurar o IIS como um processo em vez de um serviço e, em seguida, utilizava o inetinfo.exe como anfitrião app para a DLL, mas eu já não consegui mais encontrá-la. Tentei vários outros artigos / ferramentas, etc, mas não estava satisfeito com nenhum deles. A maioria dos artigos não funcionou (graças a Deus para o Sistema de Restauração do XP) e a maioria das ferramentas são orientadas para web sites, então elas retornam texto / html, em vez de texto / xml, o que confunde o meu cliente de serviço da web.

Ontem eu me deparei com um depurador ISAPI AQUI. Eu o usei apenas por 10 minutos, até agora, e devo dizer que é excelente! Eu não tive que alterar o registro, e os pedidos ainda passam por IIS. Aqui está como ele funciona.

Configuração do Servidor

  • Eu criei uma pasta virtual chamada de "depuração", com acesso script.
  • Eu coloquei ISAPIfwd.dll nessa pasta, que é um arquivo fornecido com a ferramenta.

E é tudo para o servidor!

Configuração do Cliente

  • Abra o meu projeto ISAPI na minha IDE (Delphi neste caso).
  • Defina a aplicação anfitriã como ClientISAPI.exe, um outro arquivo fornecido com a ferramenta.
  • Defina os parâmetros de execução do meu projeto para o caminho completo + nome de arquivo do meu DLL ISAPI.

Novamente, isso é tudo!

Depurando o ISAPI

  • Eu executo o meu projeto ISAPI, ClientISAPI.exe executa.
  • ClientISAPI.exe carrega meu DLL (que é a razão pela qual o parâmetro runtime é necessário).
  • Meu teste aplicação web service então solicita a seguinte url http://localhost/debug/isapifwd.dll/wsdl/IMyWebService.
  • ISAPIfwd.dll recebe o pedido, passa para o ClientISAPI.exe.
  • ClientISAPI.exe então executa o código exigido no meu DLL ISAPI, o que significa que eu posso passar pelo do código.
  • ClientISAPI retorna a resposta para ISAPIfwd.dll, que, por sua vez, responde ao Cliente.

O que eu realmente gosto sobre esta abordagem é:

  • Nenhum registro de modificações é necessário.
  • Você pode depurar remotamente no desenvolvimento real do servidor IIS.
  • Não é ponderada apenas para websites, qualquer coisa que passa através do IIS + ISAPI pode ser depurado.
  • Seu ISAPI não está em cache, assim não há necessidade de ficar iniciando / parando o IIS.