2012-05-29 21 views
6

Hemos creado un .Net Assembly y lo hemos hecho accesible como objeto COM. Cuando estamos tratando de exponer cualquier método de este objeto en la página ASP, obtenemos un error "80131509". No estamos obteniendo ningún error cuando estamos instanciando el Objeto. es decir, Server.CreateObject está de paso.error '80131509' en ASP Página

Esto funciona bien en nuestro entorno de desarrollo, pero estamos obteniendo este error en el entorno UAT. El desarrollo y UAT son casi iguales, excepto que UAT es más seguro. He intentado todas las formas posibles, pero no tuve suerte. Estoy trabajando en este tema durante los últimos 4 días y cualquier ayuda será apreciada.

Estoy sospechando que puede haber algún problema de permiso con IIS 7 al exponer ese dll. Pero no estoy seguro de qué puede ser? También le hemos otorgado todos los derechos a IUSR.

Código:

set obj = Server.CreateObject("DataAccess") 
dim rs 
set rs=obj.GetLocations("All") <--- **Here i am getting an error.** 
+1

¿Está registrado el .dll en el servidor UAT, es decir, con 'regsvr32'? – mellamokb

+0

Lo siento, olvidé mencionar esa parte. Sí dll está registrado en el servidor UAT usando Regasm. – Bugreport

+0

¿Ha registrado su.¿Conjunto NET para uso de 32 bits y 64 bits? No sé si Classic ASP se ejecuta como un proceso de 32 bits o de 64 bits (presumiblemente en w3wp.exe). Tenga en cuenta que a veces una llamada a CreateObject puede fallar silenciosamente, solo obtiene el error cuando intenta usar el objeto. Sugiero que intente crear un objeto .NET COM-visible desarrollado por Microsoft para ver si el sistema funciona en principio, antes de descubrir qué está mal con su implementación particular. – Dai

Respuesta

2

tenemos algunas de DLL de COM en mi trabajo y que a menudo se encuentran con problemas en el que registrar la DLL con regasm y la DLL no funciona. Funciona en otros entornos en vivo, pero por alguna razón, simplemente no funcionará en esta instancia. Com dlls son volubles. Algunas veces lo registraremos, lo desregistraremos, volveremos a registrarlo y reiniciaremos. A veces misteriosamente comienzan a trabajar otras veces no.

Hay un par de cosas más que pueden salir mal.

Asegúrate de que los permisos correctos estén establecidos en las carpetas en las que vive el dll y en el propio dll. También asegúrese de que cualquier dll dependiente esté presente y también tenga el permiso correcto. Asegúrese de que todo lo que necesita el dll también tiene los permisos correctos.

Si eso falla, abra regedit. Busque el guid asociado con el objeto com. A veces descubrirá que los caminos que tiene el registro están mezclados. Limpie cualquier referencia al objeto com, reinicie y vuelva a registrarlo.

También he visto una excepción lanzada en el constructor causando problemas. Cuando el objeto com se inicia, explota. En uno de nuestros objetos se agregó un método para enviar un correo electrónico cuando ocurre una excepción.

En un caso, teníamos un antiguo objeto com que ya no era compatible con la versión de Windows que estábamos ejecutando. Si ha actualizado el servidor, ese podría ser el problema. En nuestro caso, escribimos nuestro propio componente para reemplazar el anterior roto.

También asegúrese de que si el objeto COM se escribe que utilice el "fickle_com_object.dll regasm/TLB/código base"

En resumen, hay varias cosas que causan objeto COM para no trabajar:

  1. Varias rutas de acceso en el registro
  2. permisos de seguridad incorrectos en carpetas
  3. el estrellarse al crearse

Tal vez una de estas cosas resolverá su problema. Sé lo difícil que puede ser a veces. ¡Buena suerte!

Cuestiones relacionadas