2010-01-26 16 views
5

He seguido las instrucciones aquí: http://splinter.com.au/blog/?p=156 en un intento de utilizar una versión más reciente de ODP.NET sin instalar el cliente Oracle 11g. Seguí todo, hasta ahora, excepto reiniciar IIS.Oracle oci.dll en el directorio bin de ASP.NET no se puede eliminar/no funciona

Sin embargo, esto ha causado algunos problemas y tengo mucha curiosidad por saber por qué. Si trato de usar ODP.NET me encuentro con una excepción en blanco lanzada cuando la conexión de Oracle intenta conectarse (ConnectExample.Open() por ejemplo).

Pero lo más curioso es que no puedo eliminar oci.dll. Dice que está en uso. ¿Qué podría estar usando este dll? ¿Qué hace exactamente ASP.NET con un dll nativo cuando está dentro del directorio Bin? Pensé que tal vez esto es algo relacionado con el oci.dll, pero si utilizo el dll de manera similar en una aplicación WinForm de escritorio, el oci.dll no se bloquea y puedo eliminarlo libremente.

Además, después de que intenté usarlo, System.Data.OracleClient dejó de funcionar. Ahora arroja una excepción que OCIEnvCreate devuelve con -1.

Intentaré reiniciar IIS, y con suerte eso solucionará esto, pero me gustaría saber qué está sucediendo aquí (y si se puede resolver sin reiniciar IIS). ¿Alguien tiene alguna idea?

Edición: He intentado reiniciar IIS y que no fijó una cosa

Edición # 2: No creo que he formulado esta pregunta muy bien, pero eso fue debido a mi asumiendo reiniciar IIS funcionaría. Ahora solo necesito saber por qué no está funcionando. En Google buscando problemas similares, solo he encontrado 2 publicaciones en el foro que me informaron sobre mi problema exacto: Oracle ODP.NET devolvió una excepción en blanco al intentar conectarse. Aquí están los enlaces a los que:

http://kr.forums.oracle.com/forums/thread.jspa?threadID=632296

http://forums.oracle.com/forums/thread.jspa?threadID=549864

El enlace coreana anterior es la más interesante. Tienen una instalación completa que me lleva a sospechar que mi problema no es con los archivos o los archivos que faltan. Me pregunto qué quieren decir con "servidores de producción lanzando excepciones en blanco si se realiza una llamada a la DLL OCI antes de que se pueda establecer ODP".

Edición/Actualización n. ° 3: Tenemos un servidor de intranet aquí para nuestro departamento que pude probar hoy. Agregué los dll necesarios a la carpeta Bin y todo funcionó sin la necesidad de reiniciar IIS. No pregunto. Intentaré probar un poco más en este servidor para ver si puedo replicar el problema

Editar # 4 (la odisea continúa): determiné que oraocci11.dll (la DLL de la interfaz de llamada de C++) es necesaria inicialmente por ASP. NET (o la biblioteca ODP.NET) incluso para encontrar los dll del cliente 11g, después de eso oraocci11.dll parece que nunca se volverá a utilizar y se puede eliminar. No estoy seguro de lo que eso significa para mi problema, pero dado que se agrega a la base de conocimientos aquí, calculé que lo mencionaría

Edición n. ° 5: Agregué mfc71.dll y msvcr71.dll, 2 archivos de sistemas de Windows relacionados con C/MFC, al directorio Bin cuando descubrí que ODP.NET los necesita (o al menos, los necesita el cliente). Esto, al menos, hizo que las cosas se mantuvieran en el viejo error familiar de "Cliente no compatible". Eliminé esas 2 DLL y, efectivamente, volví a los mismos errores indicados anteriormente. Sin embargo, agregarlos no hizo que esos errores desaparecieran, así que tendré que reiniciar IIS nuevamente.

+0

ASP.NET cargará el Dll cuando se invoca por PIn en alguna parte, el Dll se mantendrá cargado hasta que el proceso ASP.NET se haya reciclado/reiniciado. –

Respuesta

1

En cuanto a las DLL, tendrá que detener IIS, eliminarlas y luego iniciar IIS. Esto se debe a que son DLL nativas, no Cll dll. La función de "copia oculta" de C# no se aplica a dll nativos, por lo que están bloqueados.

En cuanto a Oracle, te he enviado un correo electrónico para probar ... realmente deberíamos actualizar esta página de SO cuando encuentres una solución.

+0

Gracias, intentaré probar esos archivos. Lamentablemente, no tengo control directo sobre el servidor aquí, así que es cuestión de solicitar que se hagan estas cosas. E incluso entonces, los procesos solo se pueden detener después de las 5:30 PM. ¿Alguna idea de por qué la API MS Oracle dejó de funcionar? – Bob

+0

Estas aplicaciones de Oracle son siempre un poco delicadas que he encontrado ... es difícil de decir. – Chris

2

En lugar de (o además de) detener IIS, detenga el World Wide Web Publishing Service utilizando services.msc y luego realice los cambios.

Encontramos que para una DLL de control de gráfico utilizada por una aplicación asp.net, solo detener IIS no era suficiente, ya que no era posible eliminar el archivo (o pegar, etc.). Pero una vez que se detuvo el World Wide Web Publishing Service, podría borrarse o sobrescribirse ...

+0

Pensé que 'World Wide Web Publishing Service' era solo un sinónimo de IIS? – Chris

+0

Quizás tenga razón ... Estoy seguro de que he tenido que detener el servicio de publicación WWW al detener IIS no permitiría el cambio de archivos ... vale la pena confirmar aunque en mi propio beneficio – davidsleeps

+0

formuló la pregunta en SU ​​http://serverfault.com/questions/107053/is-stopping-iis-the-same-as-stopping-the-world-wide-web-publishing-service – davidsleeps

0

Si IIS no es el proceso que bloquea el archivo, y usted está realmente atascado, Unlocker puede ayudarlo a ver qué en realidad está bloqueando el archivo, así como también liberando esos bloqueos y eliminando el archivo con fuerza.

Get it here

2

una experiencia típica de Oracle.

Tuve este mismo problema. Los desbloqueadores no funcionan. Intenté varias: todas informan que el archivo no está bloqueado en absoluto, pero luego informan que no pueden eliminarlo.

Detener el IIS y la mayoría de los servicios de Windows no esenciales no funciona.

La solución es cambiar el nombre del archivo, reiniciar y luego eliminarlo. Por alguna razón, Windows le permite cambiar el nombre de un archivo bloqueado y lo mantiene bloqueado, pero al reiniciar falla el intento de bloquear "oci.dll" porque ya no existe bajo ese nombre.

0

Hay 3 cosas que sé de que te permitirán eliminar este y otros archivos que son parte de Oracle de datos de acceso de cliente:

1.) Detener los grupos de aplicaciones en IIS.

2.) Cierre Visual Studio.

3.) Reinicie la máquina.

Cuestiones relacionadas