martes, noviembre 09, 2004

Componentes que no debe de usarse en IIS

Llevo un tiempo buscando un problema con un IIS que decidia colgarse cada dos o tres días, sin dejar rastro alguno. Lo peor es que no había una traza clara de la causa que lo producía. Los volcados que había recogido hasta entonces (con utilidades como adplus) no llegaban a nada claro.

Para poder buscar el fallo de manera más sencilla:

  • Desactiva el FailFast de COM. Con esto conseguimos que en caso de casque de un componente, la excepción sea atrapada por el debugger.
  • Aislar la web que falla. Esto hace que se ejecute como un proceso independiente al cual podemos conectarnos con el debugger.
  • Desactivar el Enable Debug Excepcion Caching en las propiedades del sitio del CMS.

Tras efectuar estos pasos, resulta que todo acaba en una violación general de protección, porque a una función, WaitForMultipleObjects, se está pasando handles inválidos. Hasta aquí no dice mucho. Sin embargo, si se observa una traza de pila y los módulos cargados por el IIS en dicho proceso, me encuentro con un viejo y problemático conocido: wininet.

Este módulo nunca debe de ser cargado por el IIS. Simplemente no está soportado. De ahí a llegar al módulo que lo estaba usando fue relativamente fácil, puesto que en las trazas de pela que tenía hacia referencia a un software que usaba: el proveedor de OLE DB para Sharepoint o Exchange, msdaipp, el cual se utiliza para acceder a funcionalidades Webdav.

No hay comentarios: